UPDATE IF EXISTS 查询

Posted

技术标签:

【中文标题】UPDATE IF EXISTS 查询【英文标题】:UPDATE IF EXISTS Query 【发布时间】:2010-07-25 20:59:32 【问题描述】:

如果表中有一行,我正在尝试更新记录。更新记录后,我想从我的方法中返回 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 CID=@cID) BEGIN ..... END" 


谢谢你..

【问题讨论】:

如果使用关键字 SET NOCOUNT ON,返回通过 RowsAffected = obj.ExecuteNonQuery() 影响的行可能会导致 -1 值。最好坚持通过 OUTPUT 参数或 SELECT RowsAffected = @@ROWCOUNT 记录集返回计数 - 以防万一您使用 SET NOCOUNT ON。如果您要检索下面的 RowsUpdated 版本,请不要使用 SET NOCOUNT ON 关键字,但恕我直言,我总是打开 SET NOCOUNT ON;因为命中是如此昂贵,在我的标准和最佳实践书中我一直使用它。这就是我想警告你的原因。 【参考方案1】:

每当您执行一批 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 CID=@cID) 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

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

【讨论】:

谢谢。我的 SQL 查询似乎有问题。如何使用 JOIN 条件编写更新语句? UPDATE TABLEA SET CNUM= @cnum 从 TABLEA A, TABLEB B WHERE A.CID= B.CID AND A.CNum 为 NULL AND CID=@cID 谢谢。它现在正在工作。这是我的查询。我不知道这是正确的方法。如果存在(从 TABLEA A、TABLEB B 中选择 A.CNum,其中 A.CID= B.CID AND A.CNum 为 NULL 且 CID=@cID)开始声明 @Updated INT UPDATE TABLEA SET CNUM='test' 从 TABLEA A,表 B 其中 A.CID= B.CID AND A.CNum 为 NULL 且 CID=@cID SELECT @Updated = @@ROWCOUNT END @nav100:将大代码 sn-ps 放入 cmets 不是一件好事——它们不能被格式化为好看。您为什么不使用最终解决方案更新您的原始问题(通过编辑它)?这对我们所有人都会更有用!谢谢。【参考方案2】:

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

【讨论】:

以上是关于UPDATE IF EXISTS 查询的主要内容,如果未能解决你的问题,请参考以下文章

将查询转换为 IF EXISTS

Tricky If Exists SQL 查询需要检查重叠值

update 后面带exists的作用是啥?不带的话,有啥区别?

update更新一条查询结果

可以在 SELECT 查询中使用 IF() 但不能在 UPDATE 中使用

我收到此错误:当未使用 EXISTS 引入子查询时,选择列表中只能指定一个表达式