연결된 서버에서 IDENT_CURRENT 값을 가져 오려고합니다. 출력 매개 변수가있는 원격 서버에서 sp_current_identity 저장 프로 시저를 만들었습니다.sp_executesql 내에서 원격 저장 프로 시저 실행
CREATE PROCEDURE [dbo].[sp_current_identity] (@strTableName nvarchar(255), @intRowId int OUTPUT)
AS
BEGIN
select IDENT_CURRENT(@strTableName)
END
그 후 나는 두 개의 동의어 인 sp_current_identity와 sometable을 만들었습니다.
sp_executesql을 사용하여 sp_current_identity를 실행해야합니다 (사용자 정의 DataAtapter를 생성하여 LLBLGEN 3.1을 통해 동의어로 작업합니다). 이 코드 (sp_current_identity 지역 저장 프로 시저입니다) 원격 서버에서 실행되는 경우 그것은 잘 작동
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',@[email protected] output,@p3='test24',@p4='test5',@p5='sometable'
select @p4
,하지만 코드가 로컬 서버에서 실행되는 예외가 발생합니다 : 다음 예를 참조하십시오. 다음은 오류입니다.
프로 시저 또는 함수 'sp_current_identity'에 '@strTableName'매개 변수가 제공되지 않았습니다.이 매개 변수는 제공되지 않았습니다.
도움 주셔서 감사합니다.
삽입 후 IDENT_CURRENT를 검사하는 것이 잘못 되었기 때문에 코드가 정확하지 않다. 가벼운 동시성 하에서도 스크립트는 다른 세션에 의해 삽입 된 마지막 ID를 반환하기 시작할 것이므로 응용 프로그램이 제대로 작동하지 않을 수 있습니다. 대신에'INSERT INTO ... OUTPUT inserted.idcolumn'을 사용하십시오. –
빠른 답장을 보내 주셔서 감사합니다. 'sometable'은 원격 테이블의 동의어이기 때문에 "INSERT INTO ... OUTPUT inserted.idcolumn"을 사용할 수없는 것으로 보입니다. – Alex
아직도 다른 쪽에서 저장 프로 시저를 만들 수없는 이유는 삽입 및 출력 SCOPE_IDENTITY()를 수행해야합니까? –