在动态SQL上使用链接服务器设置IDENTITY_INSERT

问题描述 投票:0回答:1

我需要在不同服务器上的两个表上插入记录。

该表在两个地方都具有相同的结构,并且它具有标识列,因此我需要运行动态sql,生成相同的id并将其插入两个服务器上。

例如:我在[SERVER_A]试图将记录插入[SERVER_A].MyDB.dbo.Mytable[SERVER_B].MyDB.dbo.Mytable。我从两个表中插入最后一个id,然后使用最后一个id + 1推送新记录。

到目前为止一切顺利,现在我需要使用动态SQL来设置identity_insert

SET IDENTITY_INSERT [SERVER_B].MyDB.dbo.Mytable ON

唯一的方法是以这种方式运行它:

@Qry = 'SET IDENTITY_INSERT MyDB.dbo.Mytable ON'
EXEC [SERVER_B].MyDb.dbo.sp_executesql ' + @Qry

问题是[SERVER_B]将是一个变量,所以我需要把前面的句子这样:

EXEC '[SERVER_B]' + '.MyDb.dbo.sp_executesql ' + @Qry

有没有办法做到这一点?我把它作为示例,但我的想法是推送具有特定id的插入,所以我需要IDENTITY_INSERT ON

sql-server
1个回答
1
投票

我知道这很疯狂......但我找到了一个解决方案:

DECLARE @Qry nvarchar(MAX)
DECLARE @Server nvarchar(50) = '[SERVER_B]'

SET @Qry = '
    DECLARE @Qry2 nvarchar(max)
    SET @Qry2 = N''
    SET IDENTITY_INSERT dbo.MyTable on
    insert dbo.MyTable (id, Name) values (34, ''''AnyName'''')
    SET IDENTITY_INSERT dbo.MyTable off''
    EXEC ' + @Server + '.MyDb.dbo.sp_executesql @Qry2'
EXEC SP_EXECUTESQL @Qry
© www.soinside.com 2019 - 2024. All rights reserved.