相关疑难解决方法(0)

没有数据更改的 UPDATE 性能

如果我有一个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 表单有性能优势,是否有可能以某种方式获得我需要的行数?

performance sql-server update query-performance

36
推荐指数
2
解决办法
5万
查看次数

UPSERT - 有没有更好的替代 MERGE 或 @@rowcount 的方法?

不知道大家有没有遇到过类似UPSERT这个概念的T-SQL命令?使用选项 (1) 或 (2) 执行 INSERT|UPDATE 操作似乎过于复杂且容易出错。

客观的

确保所需的记录(在本例中为 employee_id 1)是最新的,而不必实质上编写相同的查询两次。

语境

  • 表名:员工
  • 员工id:有主键,身份属性设置为true

选项

  1. 执行 SQL UPDATE... 检查 @@rowcount = 0 和 @@error = 0 ... 如果需要,执行 SQL INSERT

    • 缺点:您实际上必须两次编写相同的查询,一次作为插入,一次作为更新
    • con: more code = more time typing
    • con: more code = more room for error

/sf/ask/77470221/ "Update using @@rowcount"

  1. execute a SQL MERGE
    • con: you effectively have to write the same query twice, once as an insert, once as an update
    • con: more code = more time typing
    • con: …

sql-server-2008 upsert

15
推荐指数
1
解决办法
3万
查看次数

如何在 SQL Server 2008 中使用 XML 插入多条记录

我在我的 Web 应用程序后端使用 SQL Server 2008。显然,每当有多个插入场景时,我都会遍历 C# 代码中的所有记录。我从未尝试过使用 XML 进行多次插入。我认为在阅读了许多关于使用 SQL Server 2008 进行 XML 操作的博客之后,这个过程非常繁琐..所以我的问题是..

  • 通过 XML 插入是否比传统插入高效得多?
  • 是我可以在 C# 中序列化类的通用方法--> 在 SQL 中操作 XML--> 插入也将数据读取为 XML--> 将 XML 反序列化为普通对象?

sql-server-2008 xml

5
推荐指数
1
解决办法
4701
查看次数