2014-12-18 2 views
1

IN 연산자와 함께 사용하는 GUID가 여러 개인 SELECT를 만들고 싶습니다. 왜이 쿼리는 Table1UID가 @ table1IDs의 각 항목과 동일한 모든 행을 반환하지 않습니까?GUID 목록이있을 때 테이블에서 행을 선택하는 방법?

DECLARE @table1IDs NVARCHAR(100) 
SET @table1IDs = 'b15f554f-90ad-4fab-b3ac-a27bc68f3b21, 72213eb7-1041-408c-9ea1-35a667285c9b' 

SELECT * FROM table1 
WHERE Table1UID in (@table1IDs) 

그것은 단지 ID가 'b15f554f-90ad-4fab-b3ac-a27bc68f3b21'인 행을 반환합니다.

언급은 : Table1UID의 유형은 고유 식별자

입니다
+1

GUID-S의 문자열 목록을 가지고 이상하다에서 사용이 - 잘못된 디자인처럼 보인다. 왜 단순한 ID-s (int)가 아닌가? – i486

+0

이 쿼리는 디버깅 목적으로 만 사용합니다. 기본 키에는 GUID가 사용됩니다. –

답변

3

방법을 작동합니다 값이 잘못 저장되어 있습니다. 다음과 같이하십시오.

declare @temp table(ID nvarchar(1000)) 
insert into @temp values('b15f554f-90ad-4fab-b3ac-a27bc68f3b21') 
insert into @temp values('72213eb7-1041-408c-9ea1-35a667285c9b') 

SELECT * FROM table1 
WHERE Table1UID in (select ID from @temp) 
+0

을 사용할 수 있습니다. 당신의 해결책을 선택한 이유는 당신이 처음 이었기 때문입니다. Reza ArabQaeni의 해결책은 거의 같습니다. –

3
DECLARE @QRY NVARCHAR(MAX) 

SET @QRY = 'SELECT * FROM table1 WHERE Table1UID IN (' + @table1IDs + ')' 

EXEC SP_EXECUTESQL @QRY 

UPDATE

동적 값을 선택하는 경우, 아래의 코드를 사용하고 그

SELECT @table1IDs = COALESCE (@table1IDs + ',[' + YOURCOLUMN + ']', 
       '[' + YOURCOLUMN + ']') 
       FROM (SELECT DISTINCT YOURCOLUMN FROM YOURTABLE) PV 
       ORDER BY YOURCOLUMN 
+0

이 솔루션이 더 유용합니다. @alexa GUID 목록에 대한 변수 사용 – robertw

+0

이 작동하지 않습니다 –

+0

감사. 솔루션은 작동했지만 다른 GUID 열이있는 다른 조건을 추가하려고하면 변환 문제가 발생했습니다. 그러나 독립형으로 작동하지만 유지하기는 어렵습니다. 감사. –

1
DECLARE @table1IDs table(id uniqueidentifier) 
insert into @table1IDs(id) values 
('b15f554f-90ad-4fab-b3ac-a27bc68f3b21') 
,('72213eb7-1041-408c-9ea1-35a667285c9b') 

select * from table1 where Table1UID in (select id from @table1IDs) 
-1

Split 행에 문자열과 where

DECLARE @table1IDs NVARCHAR(100) 
SET @table1IDs = 'b15f554f-90ad-4fab-b3ac-a27bc68f3b21, 72213eb7-1041-408c-9ea1-35a667285c9b' 


SELECT * 
FROM table1 
WHERE Table1UID IN(SELECT Rtrim(Ltrim(Split.a.value('.', 'VARCHAR(100)'))) 
          FROM (SELECT Cast ('<M>' + Replace(@table1IDs, ',', '</M><M>') + '</M>' AS XML) AS Data) AS A 
           CROSS APPLY Data.nodes ('/M') AS Split(a)) 
관련 문제