Given a table-valued function such as dbo.Split()
from "T-SQL: Opposite to string concatenation - how to split string into multiple records", how do I pass multiple rows as arguments?
This works:
SELECT * FROM dbo.Split (',', (SELECT myColumn FROM Stuff WHERE id = 22268)) WHERE ISNULL(s,'') <> ''
It returns:
pn s ----------- ----------- 1 22351 2 22354 3 22356 4 22357 5 22360
But this does not:
SELECT * FROM dbo.Split (',', (SELECT myColumn FROM Stuff)) WHERE ISNULL(s,'') <> ''
Nor does this:
SELECT * FROM dbo.Split_temp(',', myColumn), Stuff
The docs say:
When a user-defined function that returns a table is invoked in the FROM clause of a subquery, the function arguments cannot reference any columns from the outer query.
The sort of result set I'm looking for would look something like:
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 . . .
Is there any way at all (aside from, of course, a cursor) to accomplish this?
(edit)
As requested by MarlonRibunal, a sample table to produce the above result looks like:
id myColumn ----------- ------------------------------------------- 22268 22351,22354,22356,22357,22360, 24104 22353,22355,22356,22358,22360,22362,22364,
id
is an int
; myColumn
is a varchar(max)
.
Alternatively, an SQL function can be declared to return a set (that is, multiple rows) by specifying the function's return type as SETOF sometype , or equivalently by declaring it as RETURNS TABLE( columns ) . In this case all rows of the last query's result are returned.
Multi-statement table-valued function returns a table as output and this output table structure can be defined by the user. MSTVFs can contain only one statement or more than one statement. Also, we can modify and aggregate the output table in the function body.
A table function, also called a table-valued function (TVF), is a user-defined function that returns a table. You can use a table function anywhere that you can use a table. Table functions behave similarly to views, but a table function can take parameters.
OUTER APPLY
:
SELECT Stuff.id ,Results.pn ,Results.s FROM stackoverflow_454945 AS Stuff OUTER APPLY dbo.Split(',', Stuff.myColumn) AS Results WHERE ISNULL(Results.s,'') <> ''
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With