valores usuario una tipos tabla sintaxis por para linea las guardan funciones donde definidas crear creacion con sql sql-server-2005 tsql user-defined-functions

sql - usuario - ¿Ejecutar la función de valor de tabla en varias filas?



sintaxis para crear una function en sql (2)

Dada una función con valores de tabla como dbo.Split() de "T-SQL: Opuesto a la concatenación de cadenas: cómo dividir cadenas en registros múltiples" , ¿cómo paso varias filas como argumentos?

Esto funciona:

SELECT * FROM dbo.Split ('','', (SELECT myColumn FROM Stuff WHERE id = 22268)) WHERE ISNULL(s,'''') <> ''''

Vuelve:

pn s ----------- ----------- 1 22351 2 22354 3 22356 4 22357 5 22360

Pero esto no:

SELECT * FROM dbo.Split ('','', (SELECT myColumn FROM Stuff)) WHERE ISNULL(s,'''') <> ''''

Esto tampoco lo hace:

SELECT * FROM dbo.Split_temp('','', myColumn), Stuff

Los documentos dicen:

Cuando se invoca una función definida por el usuario que devuelve una tabla en la cláusula FROM de una subconsulta, los argumentos de la función no pueden hacer referencia a ninguna columna de la consulta externa.

El tipo de conjunto de resultados que estoy buscando sería algo así 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 (aparte de, por supuesto, un cursor) de lograr esto?

(editar)

Según lo solicitado por MarlonRibunal, una tabla de muestra 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 varchar(max) .


Podría usar el comportamiento de concatenación COALESCE

declare @split varchar(max) set @split = '''' select @split = @split + Coalesce(myColumn + '','' , '' '') from Stuff WHERE id = 22268 select * from dbo.Split('','', @Left(@split,len(@split) -1))

No sé que eso sería mejor que usar un cursor.


OUTER APPLY :

SELECT Stuff.id ,Results.pn ,Results.s FROM _454945 AS Stuff OUTER APPLY dbo.Split('','', Stuff.myColumn) AS Results WHERE ISNULL(Results.s,'''') <> ''''