gpt4 book ai didi

sql - 防止在 SQL Server 的 SQL 语句的一部分中记录计数

转载 作者:行者123 更新时间:2023-12-02 00:22:17 25 4
gpt4 key购买 nike

我正在使用来自 ASP.NET C# 程序的以下 SQL 语句 block :

SET XACT_ABORT ON;  --Need to roll back upon failure
BEGIN TRANSACTION; --Need to be performed atomically
UPDATE MyTable SET Col1='SomeValue' WHERE ColID='N';
DELETE FROM MyTable WHERE ColID='X';
COMMIT;
SET XACT_ABORT OFF;

上面的 SQL block 是通过调用 SqlCommand.ExecuteNonQuery Method 立即执行的那应该返回:

For UPDATE, INSERT, and DELETE statements, the return value is the number of rows affected by the command.

但是我从 ExecuteNonQuery() 返回时得到的是更新记录的数量添加到删除记录的数量。所以我的问题是,我能否以某种方式让它只返回已删除记录的数量?

最佳答案

这一行代码 SET NOCOUNT ON,放在存储过程的顶部,关闭了在执行每个 T-SQL 语句后 SQL Server 发送回客户端的消息。这是对所有 SELECT、INSERT、UPDATE 和 DELETE 语句执行的。

通过消除网络的这种额外开销,它可以大大提高数据库和应用程序的整体性能。

如果您仍然需要获取受正在执行的 T-SQL 语句影响的行数,您仍然可以使用 @@ROWCOUNT 选项。通过发出 SET NOCOUNT ON 此函数 (@@ROWCOUNT) 仍然有效,并且仍然可以在您的存储过程中用于确定有多少行受到该语句的影响。

SET NOCOUNT ON 
SET XACT_ABORT ON; --Need to roll back upon failure
BEGIN TRANSACTION; --Need to be performed atomically
UPDATE MyTable SET Col1='SomeValue' WHERE ColID='N';
SET NOCOUNT OFF
DELETE FROM MyTable WHERE ColID='X';
COMMIT;
SET XACT_ABORT OFF;

关于sql - 防止在 SQL Server 的 SQL 语句的一部分中记录计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10378195/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com