区分大小写的链接服务器合并脚本 - 设置 IDENTITY_INSERT <table> ON 不工作

Case-Sensitive Linked-Server merge script - Set IDENTITY_INSERT <table> ON not working

我正在做一个实验脚本来进行 SQL 比较(COLLATED 区分大小写)并且我遇到了 SET IDENTITY_INSERT <Table> ON

的问题

我已经打开了这个选项并禁用了外键检查,但它似乎仍然在抱怨后者。

以下是我遵循的步骤:

1 - 我创建了一个链接服务器

EXEC sp_addlinkedserver @Server=N'xxx.xxx.xxx.xxx', @srvproduct=N'SQL Server'

2 - 我添加了登录凭据

EXEC master.dbo.sp_addlinkedsrvlogin 
@rmtsrvname = N'xxx.xxx.xxxx.xxx', 
@locallogin = NULL , 
@useself = N'False',
@rmtuser = N'xxxxxxxxxxx',
@rmtpassword = N'xxxxxxxxxxx'

3 - 在同一批次中,我设置了 identity_insert、禁用外键检查和 运行 以下合并脚本。请注意,延迟查询 returns 一个 XML 字段在分布式服务器上是不允许的,所以我转换为 NVARCHAR(MAX)

SET IDENTITY_INSERT [DATABASE1].[dbo].[TABLE1] ON
ALTER TABLE [DATABASE1].[dbo].[TABLE1] NOCHECK CONSTRAINT ALL

MERGE [DATABASE1].[dbo].[TABLE1]
USING OPENQUERY([xxx.xxx.xxx.xxx], 'SELECT S.ID, S.EventId, S.SnapshotTypeID, CAST(S.Content AS NVARCHAR(MAX)) AS Content FROM [DATABASE1].[dbo].[TABLE1] AS S') AS S
ON (CAST([DATABASE1].[dbo].[TABLE1].Content AS NVARCHAR(MAX)) = S.Content)
WHEN NOT MATCHED BY TARGET
    THEN INSERT VALUES (S.ID, S.EventId, S.SnapshotTypeID, CAST(S.Content AS XML))
WHEN MATCHED 
    THEN UPDATE SET [DATABASE1].[dbo].[TABLE1].EventId = S.EventId,
                    [DATABASE1].[dbo].[TABLE1].SnapshotTypeID = S.SnapshotTypeID,
                    [DATABASE1].[dbo].[TABLE1].Content = S.Content
COLLATE Latin1_General_CS_AS;
GO

我收到的错误消息如下:

Msg 8101, Level 16, State 1, Line 4
An explicit value for the identity column in table 'Database1.dbo.Table' can only be specified when a column list is used and IDENTITY_INSERT is ON.

我该如何解决这个问题?正如我所提到的,这个脚本只是我正在编写的系统之一的实验。我可能在某个地方重新发明了轮子,但这一切都是为了在这个练习中学习。

table 'Database1.dbo.Table' 中标识列的显式值只能在使用列列表且 IDENTITY_INSERT 为 ON 时指定。

您没有列列表