Ecco una UDF che utilizzo da MSSQL 2000. L'ho trovata da qualche parte, mi dispiace, non ricordo dove.
Fondamentalmente, è possibile eseguire un join sull'UDF, dove il primo parametro è la stringa delimitata e il secondo parametro è il delimitatore.
SELEZIONA t1.somecolumn DA SomeTable t1 INNER JOIN dbo.Split (@delimitedVar, '') t2 ON t1.ID = t2.Element
CREATE FUNCTION [dbo].[Split]
(
@vcDelimitedString varchar(max),
@vcDelimiter varchar(100)
)
RETURNS @tblArray TABLE
(
ElementID smallint IDENTITY(1,1), --Array index
Element varchar(1000) --Array element contents
)
AS
BEGIN
DECLARE @siIndex smallint, @siStart smallint, @siDelSize smallint
SET @siDelSize = LEN(@vcDelimiter)
--loop through source string and add elements to destination table array
WHILE LEN(@vcDelimitedString) > 0
BEGIN
SET @siIndex = CHARINDEX(@vcDelimiter, @vcDelimitedString)
IF @siIndex = 0
BEGIN
INSERT INTO @tblArray VALUES(@vcDelimitedString)
BREAK
END
ELSE
BEGIN
INSERT INTO @tblArray VALUES(SUBSTRING(@vcDelimitedString, 1,@siIndex - 1))
SET @siStart = @siIndex + @siDelSize
SET @vcDelimitedString = SUBSTRING(@vcDelimitedString, @siStart , LEN(@vcDelimitedString) - @siStart + 1)
END
END
RETURN
END
sono l'id del generato da input dell'utente? – Eric
L'utente seleziona i record da cercare con una casella di controllo, ma non ha il controllo su cosa sia l'effettivo "Id". – orandov
Quindi SQL dinamico non è una cattiva idea se non è soggetto ad iniezione ... ma prova la risposta che ho postato invece di essere al sicuro. – Eric