Я пытаюсь получить значение IDENT_CURRENT на связанном сервере. Я создал хранимую процедуру sp_current_identity на удаленном сервере с выходным параметром.
CREATE PROCEDURE [dbo].[sp_current_identity] ( @strTableName nvarchar(255), @intRowId int OUTPUT )
AS
BEGIN
select IDENT_CURRENT(@strTableName)
END
После этого я создал два синонима: sp_current_identity и sometable.
Мне нужно выполнить sp_current_identity, используя sp_executesql (я создаю собственный DataAtapter для работы с синонимами через LLBLGEN 3.1). Пожалуйста, смотрите следующий пример:
declare @p4 int
set @p4=NULL
exec sp_executesql N'SET XACT_ABORT ON; INSERT INTO [db].[dbo].[sometable] ([FieldName], [TableName], [UserField]) VALUES (@p1, @p3, @p4) ;
exec dbo.sp_current_identity @p5, @p2
;SET XACT_ABORT OFF',N'@p1 varchar(50),@p2 int output,@p3 varchar(50),@p4 varchar(50), @p5 varchar(200)',
@p1='test24',@p2=@p4 output,@p3='test24',@p4='test5',@p5='sometable'
select @p4
Хорошо работает, когда этот код выполняется на удаленном сервере (где sp_current_identity - локальная хранимая процедура), но вызывает исключение, когда код выполняется на локальном сервере.
Вот ошибка:
Процедура или функция 'sp_current_identity' ожидает параметр '@strTableName', который не был предоставлен.
Спасибо за вашу помощь!