如果我有一个UPDATE实际上没有改变任何数据的语句(因为数据已经处于更新状态)。在WHERE子句中进行检查以防止更新是否有任何性能优势?
例如,以下 UPDATE 1 和 UPDATE 2 之间的执行速度是否有任何差异:
CREATE TABLE MyTable (ID int PRIMARY KEY, Value int);
INSERT INTO MyTable (ID, Value)
VALUES
(1, 1),
(2, 2),
(3, 3);
-- UPDATE 1
UPDATE MyTable
SET
Value = 2
WHERE
ID = 2
AND Value <> 2;
SELECT @@ROWCOUNT;
-- UPDATE 2
UPDATE MyTable
SET
Value = 2
WHERE
ID = 2;
SELECT @@ROWCOUNT;
DROP TABLE MyTable;
Run Code Online (Sandbox Code Playgroud)
我问的原因是我需要行数来包含未更改的行,所以我知道如果 ID 不存在是否进行插入。因此,我使用了 UPDATE 2 表单。如果使用 UPDATE 1 表单有性能优势,是否有可能以某种方式获得我需要的行数?
不知道大家有没有遇到过类似UPSERT这个概念的T-SQL命令?使用选项 (1) 或 (2) 执行 INSERT|UPDATE 操作似乎过于复杂且容易出错。
客观的
确保所需的记录(在本例中为 employee_id 1)是最新的,而不必实质上编写相同的查询两次。
语境
选项
执行 SQL UPDATE... 检查 @@rowcount = 0 和 @@error = 0 ... 如果需要,执行 SQL INSERT
/sf/ask/77470221/ "Update using @@rowcount"
我在我的 Web 应用程序后端使用 SQL Server 2008。显然,每当有多个插入场景时,我都会遍历 C# 代码中的所有记录。我从未尝试过使用 XML 进行多次插入。我认为在阅读了许多关于使用 SQL Server 2008 进行 XML 操作的博客之后,这个过程非常繁琐..所以我的问题是..