Проблема идентификационных данных SQL Server

У меня есть запрос как ниже

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

select @str_CustomerID= scope_identity()

После выполнения это возвращает пустой указатель в моем параметре.

Я хочу получить значение идентификационных данных. Как я могу сделать это?

Основным вопросом здесь является "IMDECONP38" - имя сервера, которое я использовал. Если я удаляю это, я могу получить значение идентификационных данных в моем параметре.

11
задан Peter Mortensen 24 September 2010 в 09:36
поделиться

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′
)

Правка: Прутсвондер сказал это первым: используйте сохраненную процедуру на связанном сервере

5
ответ дан 3 December 2019 в 09:19
поделиться
select @@IDENTITY AS 'variablename'
-2
ответ дан 3 December 2019 в 09:19
поделиться

Пожалуйста, проверьте, установлены ли для вашей таблицы какие-либо триггеры . Это вызовет проблему при использовании SCOPE_IDENTITY () для получения последнего вставленного поля идентификации.

HTH

-2
ответ дан 3 December 2019 в 09:19
поделиться

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

9
ответ дан 3 December 2019 в 09:19
поделиться

Использовать хранимую процедуру в удаленной базе данных.

CREATE PROCEDURE InsertCustomer (@name varchar(100), @address varchar(100), 
    @email varchar(100), @phone varchar(100), @id int OUT)
AS
    INSERT INTO dbo.CustomerMaster 
    (CustomerName , CustomerAddress , CustomerEmail , CustomerPhone ) 
    VALUES (@name, @address, @email, @phone)

    SET @id = SCOPE_IDENTITY()
GO

DECLARE @id int
EXEC IMDECONP38.Customer.dbo.InsertCustomer 'Fred','Bedrock','a@b','5',@id OUT
GO
2
ответ дан 3 December 2019 в 09:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: