2017-03-28 10 views
0

내 질문에 대한 답변을 찾았습니다. 모두 아래 구문이 작동해야한다고 나와 있습니다. 그것은 나를 위해 작동하지 않습니다. 내 출력 변수는 항상 NULL이므로 도움을 주시면 감사하겠습니다.sp_executesql Cross Server Insert return Scope_Identity()

DECLARE @SqlCommand NVARCHAR(1000), 
       @ParamDefinition nvarchar(500), 
       @Id INT 

SET @SqlCommand = N'INSERT INTO [server].db.dbo.table(Title) VALUES(''Insert Into table From othertable Test'') SELECT @Id = SCOPE_IDENTITY()' 
SET @ParamDefinition = N'@Id integer OUTPUT' 

EXECUTE sp_executesql @SqlCommand, @ParamDefinition, @Id OUTPUT 

Select @Id 

Select @Id 반환 NULL 모든 시간은 있지만, 행이 테이블에 삽입됩니다.

내 코드가 작동하고 ID를 반환해야하는 상태에서 스택 오버플로에 대해 4 ~ 5 개의 결과가 발견되었습니다. 그러나 그렇지 않습니다.

제 3 자 서버에서 작업하고 있는데,보고 있지 않다고 오류가 표시 될 가능성이 있습니다.

도움 주셔서 감사합니다.

참고 : 아래 문은 Scope_Identity() 값을 반환합니다. 문제는 변수에서 그 값을 잡는 방법을 모른다는 것입니다. @Id NULL 항상 -

EXEC [Server].[db].[dbo].sp_executesql N' 
    INSERT INTO [server].db.dbo.table(Title) VALUES(''Test Title Insert'') 
    SELECT SCOPE_IDENTITY()' 

나는

DECLARE @Id INT 

EXEC @Id = [Server].[db].[dbo].sp_executesql N' 
    INSERT INTO [server].db.dbo.table(Title) VALUES(''Test Title Insert'') 
    SELECT SCOPE_IDENTITY()' 

선택 @Id는 행운과 함께 아래의 구문을 시도했습니다.

답변

0

첫 번째 스 니펫의 매개 변수 정의는 integer이 아닌 int을 사용해야합니다.

또한 this question에서 설명한대로 OUTPUT 키워드를 사용해 볼 수도 있습니다.

+0

매개 변수 정의를 int로 변경했으며 여전히 변수가 NULL을 반환했습니다. – Alwelder

+0

@Alwelder 연결된 질문 에서처럼 OUTPUT을 사용해보세요. –