2014-03-03 2 views
0

SQL에서 FOR XML PATH를 int 열로 사용할 수 있습니까? 그래서 내가 좋아하는 뭔가를 사용할 수 :SQL int 열의 xml 경로?

declare @contactIds = (select id from contacts) 

다음이처럼 사용이 가능

select * from calls where contactId in (@contactIds) 

인가?

+1

변수의 ID 컬렉션을 저장하여 나중에 쿼리의 WHERE 절에서 사용할 수 있습니다. 임시 테이블을 사용하여이를 수행 할 수 있습니다. –

+0

'@ contactIds'가 문자열이면 (FOR XML PATH를 사용하면됩니다), SQL은 해당 문자열의 내용을 검사하지 않고 쉼표를 찾은 다음 그 * single * 문자열을 마치 그 것처럼 취급하기로 결정합니다 실제로 IN()에 대한 여러 개의 * 분리 된 매개 변수였습니다.이 작업을 수행하는 언어는 모르겠으므로 사람들이 SQL을 사용하여 작업하려고 할 때 항상 놀랍습니다. –

답변

0

이게 원하는가요?

select * 
from calls 
where contactId in (select id from contacts); 

내 생각 엔이 문제는 문제보다 더 복잡하다는 것이다, 그래서 이것은 정말 문제가 해결되지 않습니다

select @contactIds = stuff((select ','+cast(id as varchar(8000)) 
          from contacts 
          for xml path('') 
          ), 1, 1, ''); 

또한 직접 하위 쿼리 또는 테이블 변수를 사용할 수 있습니다.

+0

나는 쿼리를 가져 왔습니다. 연락처 이름과 발신 전화 번호 및 수신 전화 번호를 표시합니다. 서브 쿼리를 사용하지만 실행하는 데 12 초가 걸리므로이를 개선하는 방법을 찾고 있습니다 ... –

+0

실제로 쿼리를 개선 할 수있는 방법이있을 수 있습니다. 당신이 실제로하고있는 일에 대한 정보를 다른 * 질문에 던질 것을 제안 할 것입니다. 당신은'in' 문에'@ContactIds'를 사용할 수 없습니다 (당신이 원하는대로 할 수는 없습니다). –

관련 문제