从另一台服务器(链接服务器)获取@@Identity
我有一个链接服务器, 我想向链接服务器上的表添加一条记录, 是否可以从具有链接服务器的另一台服务器获取@@identity? (SQL Server 2005)
I have a linked server,
I want to add a record to the table on the linked server,
Is it possible take @@identity from another server with linked server? (SQL Server 2005)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
此处使用 SQL Server 2012。
我尝试过 gbn 方法,但收到此错误:
除此之外,我需要在语句之前添加 SET XACT_ABORT ON; ,因为我正在使用分布式事务。
因此,我最终通过这样做解决了这两个问题:
并且我能够在分布式事务中运行它,同时从插入中获取身份。
关于此语句的一个奇怪的行为是,如果我在之前没有打开分布式事务(必须是分布式事务)的情况下运行插入语句,它将返回下一个标识,但不会插入任何内容。我不知道为什么会发生这种情况。
编辑:
尝试了其他方法,它不需要在分布式事务上设置
XACT_ABORT ON
即可工作,并且无需事务即可正常工作。Using SQL Server 2012 here.
I've tried gbn method but I got this error:
Besides that, I needed to add the
SET XACT_ABORT ON;
before my statement as I was using Distributed Transactions.So I ended up solving both the issues by doing this:
And I was able to run this in a Distributed Transaction while getting the Identity from my insert.
A weird behavior about this statement is that if I run the Insert statement without opening the Distributed Transaction previously (must be the distributed one) it will return the next Identity but it will not insert anything. I have no idea why this is happening.
Edit:
Tried this other method and it has worked without the need of setting
XACT_ABORT ON
on distributed transactions and works fine without transactions.您可以在链接服务器上创建一个将返回标识的存储过程。
顺便说一句,您应该使用
SCOPE_IDENTITY()
而不是@@IDENTITY
。请参阅此相关问题(获取插入的身份的最佳方法)排?)。
You can create a stored procedure on your linked server that will return the identity.
You should be using
SCOPE_IDENTITY()
rather than@@IDENTITY
, by the way.See this related question (Best way to get identity of inserted row?).