sp_executesql跨服务器插入返回Scope_Identity()

时间:2017-03-28 19:40:21

标签: scope identity sp-executesql

我找到了我的问题的答案,他们都说下面的语法应该有效。它对我不起作用。我的输出变量总是NULL所以任何帮助都会受到赞赏。

DECLARE @SqlCommand NVARCHAR(1000),
              @ParamDefinition nvarchar(500),
              @Id INT

SET @SqlCommand = N'INSERT INTO [server].db.dbo.table(Title) VALUES(''Insert Into table From othertable Test'')  SELECT @Id = SCOPE_IDENTITY()'
SET @ParamDefinition = N'@Id integer OUTPUT'

EXECUTE sp_executesql @SqlCommand, @ParamDefinition, @Id OUTPUT

Select @Id

我的Select @Id每次都会返回NULL,但该行会被插入到表格中。

我在Stack Overflow上发现了四到五个结果,表明我的代码应该有效并且应该返回ID。但事实并非如此。

我正在使用第三方服务器,是否有可能抛出我没有看到的错误。

感谢您的帮助。

注意:下面的语句返回Scope_Identity()的值。问题是我不知道如何在变量中捕获该值。

EXEC [Server].[db].[dbo].sp_executesql N'
     INSERT INTO [server].db.dbo.table(Title) VALUES(''Test Title Insert'')
     SELECT SCOPE_IDENTITY()'

我已经尝试了下面的语法而没有运气

DECLARE @Id INT

EXEC @Id = [Server].[db].[dbo].sp_executesql N'
     INSERT INTO [server].db.dbo.table(Title) VALUES(''Test Title Insert'')
     SELECT SCOPE_IDENTITY()'

选择@Id - @Id始终为NULL。

1 个答案:

答案 0 :(得分:0)

第一个代码段中的参数定义应使用int而不是integer

此外,您可以尝试使用OUTPUT关键字,如this question中所述。