2014-04-18 3 views
0

내가 그것을 잘 작동 곳에서 직접 매개 변수 값을 사용하지만 난이 변수를 통과 할 때이 오류 occures 때변수를 매개 변수로 전달하는 방법은 무엇입니까?

Msg 8114, Level 16, State 5, Line 7 
Error converting data type varchar to bigint. 


declare @PostsIds varchar(50)=N'''2'',''1''' 
SELECT  * FROM   mytable 
WHERE  id in (@PostsIds) 

을하지만,이 쿼리는

declare @PostsIds varchar(50)=N'''2'',''1''' 
SELECT  * FROM   mytable 
WHERE  id in ('2','1') 

답변

1

당신을 잘 작동 SQL 문의 IN 절에서 변수를 사용할 수 없습니다. 대신 저장 프로 시저에서이 작업을 수행 할 수 있습니다 :

Set @sql='SELECT * FROM mytable WHERE Id IN (' + @PostsIds + ')' 
exec sp_executesql @sql 
+0

그렇게하는 방법입니다. – Zane

0

귀하의 방법은 작동하지 않습니다, 당신이 그 변수에 통과 할 때, 당신은 문자열에 어떤 IN 예상하는 것입니다 목록을하지 통과 때문이다. 동적 SQL을 사용하면 즉, 나머지 쿼리를 nvarchar 변수로 먼저 작성하고 목록이있는 변수를 where 절에 추가 한 다음 문 sp_executesql을 사용하여 명령문을 실행할 수 있습니다.

관련 문제