Comment sélectionner des lignes d'une table lorsque vous avez une list de GUID?

Je veux faire un SELECT où j'ai plusieurs GUID que j'utilise avec un opérateur IN. Pourquoi cette requête ne returnne pas toutes les lignes où Table1UID est égal à chaque élément de @ table1IDs?

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

Il ne renvoie que la ligne où ID est 'b15f554f-90ad-4fab-b3ac-a27bc68f3b21'.

Mention: le type de Table1UID est UNIQUEIDENTIFIER

La façon dont vous avez stocké la valeur est erronée, je suppose, faites comme ci-dessous

 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) 
 DECLARE @QRY NVARCHAR(MAX) SET @QRY = 'SELECT * FROM table1 WHERE Table1UID IN (' + @table1IDs + ')' EXEC SP_EXECUTESQL @QRY 

METTRE À JOUR

Si vous select des valeurs dynamics, utilisez le code ci-dessous et cela fonctionnera

 SELECT @table1IDs = COALESCE (@table1IDs + ',[' + YOURCOLUMN + ']', '[' + YOURCOLUMN + ']') FROM (SELECT DISTINCT YOURCOLUMN FROM YOURTABLE) PV ORDER BY YOURCOLUMN 
 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) 

Split la string en lignes et l'utiliser dans la clause where

 DECLARE @table1IDs NVARCHAR(100) SET @table1IDs = 'b15f554f-90ad-4fab-b3ac-a27bc68f3b21, 72213eb7-1041-408c-9ea1-35a667285c9b' SELECT * FROM table1 WHERE Table1UID IN(SELECT Rsortingm(Lsortingm(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))