Penso che l'unica soluzione possibile sia il passaggio di valori separati da virgola, che è possibile convertire in una tabella in SQL utilizzando una funzione. Ecco la funzione che sto usando
CREATE FUNCTION dbo.CSVToList (@CSV varchar(3000))
RETURNS @Result TABLE (Value varchar(30))
AS
BEGIN
DECLARE @List TABLE
(
Value varchar(30)
)
DECLARE
@Value varchar(30),
@Pos int
SET @CSV = LTRIM(RTRIM(@CSV))+ ','
SET @Pos = CHARINDEX(',', @CSV, 1)
IF REPLACE(@CSV, ',', '') <> ''
BEGIN
WHILE @Pos > 0
BEGIN
SET @Value = LTRIM(RTRIM(LEFT(@CSV, @Pos - 1)))
IF @Value <> ''
INSERT INTO @List (Value) VALUES (@Value)
SET @CSV = RIGHT(@CSV, LEN(@CSV) - @Pos)
SET @Pos = CHARINDEX(',', @CSV, 1)
END
END
INSERT @Result
SELECT
Value
FROM
@List
RETURN
END
ed è possibile utilizzare il seguente codice (per esempio) per eseguire le operazioni:
DECLARE @CSV varchar(100)
SET @CSV = '30,32,34,36,40'
SELECT
ProductID,
ProductName,
UnitPrice
FROM
Products
WHERE
ProductID IN (SELECT * FROM dbo.CSVToLIst(@CSV))
ho preso il codice da qui: http://www.geekzilla.co.uk/view5C09B52C-4600-4B66-9DD7-DCE840D64CBD.htm
spero che aiuta.
fonte
2012-07-16 16:13:46
perché non sono stati memorizzati i valori in una stringa separati da una virgola? –
@Groo: Ti rendi conto che questa domanda ha più di quattro anni, spero. –
@ B.ClayShannon: ciao, sì, ho semplicemente notato che molte domande simili sono fondamentalmente la stessa domanda collegata, quindi le ho esaminate tutte e ho aggiunto il link al più vecchio. Non ho nulla con nessuno di questi, volevo solo fare un po 'di pulizia come faccio di solito quando trovo un thread comune. – Groo