我使用链接服务器在远程Sql Server中插入记录,现在我想获取插入记录的ID。类似于本地服务器中的scope_identity()
。我的远程sql server是2000版。
我见过this post但是我无法在远程sql server中添加任何存储过程
你可以使用远程端的sp_executesql
:
DECLARE @ScopeIdentity (ID int);
INSERT INTO @ScopeIdentity
EXEC server.master..sp_executesql N'
INSERT INTO database.schema.table (columns) VALUES (values);
SELECT SCOPE_IDENTITY()';
SELECT * FROM @ScopeIdentity;
或者,您可以使用OPENQUERY
:
SELECT *
FROM OPENQUERY(server, '
INSERT INTO database.schema.table (columns) VALUES (values);
SELECT SCOPE_IDENTITY() AS ID');
另一种变体,如果链接用户有权在链接服务器上调用过程:
DECLARE @ScopeIdentity int
EXEC [linkedServerName].[database].[schema].sp_executesql N'
INSERT INTO [table] ...
SELECT @ScopeIdentityOut = SCOPE_IDENTITY()',
N'@ScopeIdentityOut INT OUTPUT',
@ScopeIdentityOut = @ScopeIdentity OUTPUT
根据2019-04-29的评论更新。
尝试这样的事情:
--when RemoteTable is (Rowid int identity(1,1) primary key, rowValue varchar(10))
exec ('INSERT server.database.owner.RemoteTable (rowValue) VALUES (''wow'');select SCOPE_IDENTITY()')
EXEC将返回包含SCOPE_IDENTITY()
值的结果集
如果您必须为SQL Server 2005+执行此操作,则只需添加OUTPUT INSERTED.IdentityColumn
即可获得该标识的结果集。将INTO
添加到OUTPUT
上,您可以将它们存储在本地计算机上的表/表变量中。