【问题标题】:UPDATE IF EXISTS QueryUPDATE IF EXISTS 查询
【发布时间】: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;因为命中是如此昂贵,在我的标准和最佳实践书中我一直使用它。这就是我想警告你的原因。

标签: c# sql


【解决方案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)。

【讨论】:

    猜你喜欢
    • 2016-10-14
    • 2011-01-17
    • 2014-04-27
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 2012-09-08
    • 2012-08-08
    相关资源
    最近更新 更多