SQL Server 使用 except 与 Binary_Checksum

问题描述

我正在使用 sql Server 并希望进行批量更新,但如果已存在相同的值,则不希望重新更新任何行。

例如考虑以下表格及其数据

DECLARE @UpdatedIds TABLE
(
    BookId  INT
)

CREATE TABLE Book
(
    [Id]        INT,[Name]      NVARCHAR(MAX)
)

INSERT INTO Book([Id],[Name])
SELECT 1,'Book1'
UNION
SELECT 2,'Book2'
UNION
SELECT 3,'Book3'
UNION
SELECT 4,'Book4'
UNION
SELECT 5,'Book5'

CREATE TABLE #Book
(
    [Id]        INT,[Name]      NVARCHAR(MAX)
)

INSERT INTO #Book([Id],'Book1_Changed'
UNION
SELECT 2,'Book2_Changed'
UNION
SELECT 3,'Book5'

我想要的是当我运行以下查询

UPDATE [BO]
SET [Name] = [BU].[Name]
OUTPUT [INSERTED].[Id] INTO @UpdatedIds([BookId])
FROM [Book] [BO]
INNER JOIN #Book [BU] ON [BO].[Id] = [BU].[Id]

SELECT * FROM @UpdatedIds

@UpdatedIds 应该有 1 和 2 的记录,而不是 3、4 或 5

我有两种方法可以做到这一点,并且想知道哪种方法最快/更好。

  1. 使用Except关键字并删除已存在的行

  2. 使用Binary_Checksum,即比较实际表和临时表中记录的校验和并删除具有相等校验和的记录

谢谢

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)