更新如果存在查询

问题描述:

我想更新记录,如果表中有一行。更新记录后,我想从我的方法返回TRUE。我正在使用以下查询。我正在使用SQL Server 2005.如何知道我的SQL查询是否更新了表?请告诉我。更新如果存在查询

Private Boolean UpdateTable() 
{ 
    string sql = "IF EXISTS(Select A.CNum FROM TABLEA A, TABLEB B WHERE A.CID= B.CID AND A.CNum is NULL AND [email protected]) BEGIN ..... END" 

} 

谢谢。

+0

如果使用关键字SET NOCOUNT ON,返回通过RowsAffected = obj.ExecuteNonQuery()影响的行可能会导致-1值。坚持通过OUTPUT参数或SELECT RowsAffected = @@ ROWCOUNT记录集来返回计数可能会更好 - 以防万一您使用SET NOCOUNT ON。 如果您要检索以下RowsUpdated版本,请不要使用SET NOCOUNT ON关键字,但恕我直言,我总是打开SET NOCOUNT ON;因为在我的标准和最佳实践书中,我一直都在使用它,所以它的价格非常昂贵。这就是为什么我想警告你。 – SnapJag 2010-07-29 22:49:47

每当执行批处理SQL,你应该被通知有多少行进行了修改/插入/更新,无论是从您例如返回值SqlCommand.ExecuteNonQuery()电话:

Private Boolean UpdateTable() 
{ 
    int rowsUpdated = 0; 

    string sql = "IF EXISTS(Select A.CNum FROM TABLEA A, TABLEB B WHERE A.CID= B.CID AND A.CNum is NULL AND [email protected]) BEGIN ..... END" 

    using(SqlConnection con = new SqlConnection("your-connection-string-here")) 
    { 
     using(SqlCommand cmd = new SqlCommand(sql, con)) 
     { 
      con.Open(); 
      rowsUpdated = cmd.ExecuteNonQuery(); 
      con.Close(); 
     } 
    } 

    return (rowsUpdated > 0); 
} 

,或者你可以在UPDATE后查询您的SQL语句@@ROWCOUNT属性:

... 
BEGIN 
    UPDATE ........ 

    DECLARE @Updated INT 
    SELECT @Updated = @@ROWCOUNT 
END 

您可以返回值,或检查的大于零或任何你的值想做。

+0

谢谢。它看起来像我的SQL查询有问题。我怎样才能写JOIN条件的更新语句? UPDATE TABLEA SET CNUM = @cnum FROM TABLEA A,TABLEB B WHERE A.CID = B.CID AND A.CNUM为NULL且CID = @ cID – nav100 2010-07-25 21:13:22

+0

谢谢。现在正在工作。这是我的查询。我不知道这是对的。 如果存在(选择A.CNUM FROM TABLEA A,TABLE B B WHERE A.CID = B.CID AND A.CNUM为NULL且CID = @ cID) BEGIN DECLARE @Updated INT UPDATE TABLEA SET CNUM ='test' FROM TABLEA A,TABLEB B WHERE A.CID = B.CID AND A.CNUM为NULL且CID = @ cID SELECT @Updated = @@ ROWCOUNT END – nav100 2010-07-25 21:22:04

+0

@ nav100:在评论中放入大型代码片段并不是一件好事 - 他们不能被格式化看起来不错。你为什么不用你的最终解决方案更新你的原始问题(通过编辑)?这对我们所有人更有用!谢谢。 – 2010-07-26 05:03:12

您可以使用Sqlcommand.ExecuteNonQuery运行您的查询,并返回受影响的行数(1或0)。