Dada una función con valores de tabla como dbo.Split()
desde "T-SQL: Opposite to string concatenation - how to split string into multiple records", ¿cómo paso varias filas como argumentos?¿Ejecuta la función de valor de tabla en varias filas?
Esto funciona:
SELECT *
FROM dbo.Split
(',', (SELECT myColumn FROM Stuff WHERE id = 22268))
WHERE ISNULL(s,'') <> ''
Devuelve:
pn s
----------- -----------
1 22351
2 22354
3 22356
4 22357
5 22360
Pero esto no es así:
SELECT *
FROM dbo.Split
(',', (SELECT myColumn FROM Stuff))
WHERE ISNULL(s,'') <> ''
Tampoco hace esto:
SELECT * FROM dbo.Split_temp(',', myColumn), Stuff
The docs dicen:
Cuando una función definida por el usuario que devuelve una tabla se invoca en la cláusula FROM de una subconsulta, los argumentos de la función no puede hacer referencia las columnas de la consulta externa.
El tipo de conjunto de resultados Busco sería algo como:
id pn s
----------- ----------- -----------
22268 1 22351
22268 2 22354
22268 3 22356
22268 4 22357
22268 5 22360
24104 1 22353
24104 2 22355
24104 3 22356
24104 4 22358
24104 5 22360
24104 6 22362
24104 7 22364
.
.
.
¿Hay alguna forma para nada (aparte de, por supuesto, un cursor) para lograr esto?
(edit)
lo solicitado por MarlonRibunal, una tabla de ejemplo para producir el resultado anterior se ve así:
id myColumn
----------- -------------------------------------------
22268 22351,22354,22356,22357,22360,
24104 22353,22355,22356,22358,22360,22362,22364,
id
es un int
; myColumn
es un varchar(max)
.
¡Impresionante! El segundo "FROM Stuff" fue marcado como un error de sintaxis, pero después de eliminarlo, la declaración hizo exactamente lo que yo quería. Gracias. –
Bien, dejé eso en mi copia/pega - He probado y corregido el código aquí. –
¿Por qué usar 'isnull (Results.s, '') <> ''' cuando 'Results.s no es nulo' también funciona y es mucho más escueto? – tgandrews