получить @@ личность с другого сервера (связанный сервер) - PullRequest
6 голосов
/ 27 декабря 2010

У меня есть связанный сервер, Я хочу добавить запись в таблицу на связанном сервере, Можно ли взять @@ identity с другого сервера со связанным сервером? (SQL Server 2005)

Ответы [ 2 ]

5 голосов
/ 27 декабря 2010

Вы можете создать хранимую процедуру на связанном сервере, которая будет возвращать идентификатор.

Кстати, вы должны использовать SCOPE_IDENTITY() вместо @@IDENTITY.

См. этот связанный вопрос (Лучший способ получить идентичность вставленной строки?).

0 голосов
/ 23 апреля 2015

Использование SQL Server 2012 здесь.

Я пробовал метод gbn, но получил эту ошибку:

Msg 405, Level 16, State 1, Line 1
A remote table cannot be used as a DML target in a statement which includes an OUTPUT clause or a nested DML statement.

Кроме того, мне нужно было добавить SET XACT_ABORT ON; перед моим заявлением, поскольку я использовал распределенные транзакции.

Итак, я решил обе проблемы, выполнив следующее:

BEGIN DISTRIBUTED TRANSACTION

SELECT idcolumn
FROM OPENQUERY(MyRemoteServer, '
  SET XACT_ABORT ON;
  INSERT INTO MyRemoteBD.dbo.SomeTable(col1,col2, ...) 
  OUTPUT INSERTED.idcolumn
  VALUES (val1,val2, ...);
  SET XACT_ABORT OFF');

COMMIT

И я смог запустить это в распределенной транзакции, получая удостоверение из моей вставки.

Странное поведение в отношении этого оператора заключается в том, что если я запустил оператор Вставка, не открыв распределенную транзакцию ранее (должна быть распределенной), он вернет следующую идентификацию, но ничего не вставит. Я понятия не имею, почему это происходит.

Редактировать:

Попробовал этот другой метод, и он работал без необходимости установки XACT_ABORT ON для распределенных транзакций и прекрасно работает без транзакций.

exec [MyRemoteServer].MyRemoteBD.dbo.sp_executesql N'
    INSERT INTO SomeTable (col1,col2,...) 
    VALUES (val1,val2,...); 
    SELECT SCOPE_IDENTITY ()'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...