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))