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 查询的主要内容,如果未能解决你的问题,请参考以下文章
Tricky If Exists SQL 查询需要检查重叠值
update 后面带exists的作用是啥?不带的话,有啥区别?