2011-11-03 2 views
5

"사용자 정의 테이블 유형"매개 변수를 동적 SQL 인 sp_executesql에 전달하는 데 도움이 필요합니다.사용자 정의 테이블 매개 변수를 동적 SQL, sp_executesql에 전달

DECLARE @str as nvarchar(Max) 
DECLARE @IDLIST AS ListBigintType /* this is my table type, with ItemId column (bigint)*/ 

INSERT INTO @IDLIST 

SELECT DISTINCT bigintid FROM tableWithBigInts WITH(NOLOCK) 


set @str ='select * from SomeTable where ID in (select ItemId from @IdTable) ' 

EXEC sp_executesql @str , @ParamDefs, @IdTable = @IDLIST 

그것은 말한다 :

여기 내 예제 코드의 테이블 변수를 선언해야 "@IdTable"

나는이 작업을 얻을 수 있고, 유착과 해결 방법을 얻을 수 없다 (bigints의 경우) 결과가 8000자를 넘기 때문입니다. 에 @ParamDefs 설정

답변

7

시도 :

create type ListBigintType as table (ItemId bigint) 
go 
declare @t as ListBigintType 
insert @t select 6*7 

exec sp_executesql 
    N'select ItemId from @IdTable', 
    N'@IdTable ListBigintType readonly', @t 
+0

미안, 내가 여기에 질문을 쓰고 있어요 때 쓰기 깜빡 해요 :

EXEC sp_executesql @str , N'@IdTable ListBigintType readonly', @IdTable = @IDLIST 

여기에 전체 작업 예입니다. 쿼리에 이미 있습니다. 하지만 같은 오류가 발생합니다. –

+0

작업 예제가 추가되었습니다. 'select name, compatibility_level from sys.databases'에서 데이터베이스의 호환성 수준을 확인 하시겠습니까? SQL Server 2005 이상에서는 90 이상으로 설정해야합니다. – Andomar

+0

필자가 게시 한 예제가 설치 과정에서 올바르게 실행되므로'sp_executesql'을 사용하여 테이블 반환 매개 변수를 전달할 수 있습니다. – Andomar

관련 문제