我需要在不同服务器上的两个表上插入记录。
该表在两个地方都具有相同的结构,并且它具有标识列,因此我需要运行动态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
我知道这很疯狂......但我找到了一个解决方案:
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