SQL Server身份问题

Pra*_*ana 11 sql database sql-server identity sql-server-2005

我有一个如下查询

declare @str_CustomerID int
Insert into IMDECONP38.[Customer].dbo.CustomerMaster
( CustomerName , CustomerAddress , CustomerEmail , CustomerPhone )
values ( ‘werw12e’ , ‘jkj12kj’ , ‘3212423sdf’ , ‘1212121?
)

select @str_CustomerID= scope_identity()
Run Code Online (Sandbox Code Playgroud)

执行后,它在我的参数中返回null.

我想获得身份的价值.我怎样才能做到这一点?

这里的主要问题是"IMDECONP38" - 我使用的服务器名称.如果我删除它,我可以在我的参数中获取身份的值.

Pru*_*der 9

对于类似的问题,请参阅此旧问题:您无法SCOPE_IDENTITY()从其他服务器检索范围变量.相反,您应该使用远程服务器上的存储过程来实现此目的.


gbn*_*gbn 5

当您使用"IMDECONP38"时,您会破坏SCOPE_IDENTITY,因为

  • INSERT范围现在位于IMDECONP38链接服务器上
  • SCOPE_IDENTITY在本地服务器上运行,而不是在IMDECONP38上运行

如果在SQL Server 2005上,请尝试OUTPUT子句,但我不确定它如何用于链接服务器调用

Insert into IMDECONP38.[Customer].dbo.CustomerMaster
OUTPUT INSERTED.ID   --change as needed
( CustomerName , CustomerAddress , CustomerEmail , CustomerPhone )
values ( ‘werw12e’ , ‘jkj12kj’ , ‘3212423sdf’ , ‘1212121?
)
Run Code Online (Sandbox Code Playgroud)

编辑:Prutswonder首先说:在链接服务器上使用存储过程