Aquí hay una UDF que he estado usando desde MSSQL 2000. Encontré esto en alguna parte, lo siento, no puedo recordar dónde.
Básicamente, puede hacer una unión en la UDF, donde el primer parámetro es la cadena delimitada, y el segundo parámetro es el delimitador.
t1.somecolumn SELECT FROM t1 sometable INNER JOIN dbo.Split (@delimitedVar, '') t2 EN 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
son Identificación del generada por la entrada del usuario? – Eric
El usuario selecciona los registros para buscar con una casilla de verificación pero no tiene control sobre cuál es el "Id" real. – orandov
Entonces sql dinámico no es una mala idea si no está sujeto a inyección ... pero pruebe la respuesta que publiqué en su lugar para estar seguro. – Eric