Для табличной функции, такой как dbo.Split()
из "T-SQL: против конкатенации строк - как разбить строку на несколько записей" , как сделать Я передаю несколько строк в качестве аргументов?
Это работает:
SELECT *
FROM dbo.Split
(',', (SELECT myColumn FROM Stuff WHERE id = 22268))
WHERE ISNULL(s,'') <> ''
Он возвращает:
pn s
----------- -----------
1 22351
2 22354
3 22356
4 22357
5 22360
Но это не так:
SELECT *
FROM dbo.Split
(',', (SELECT myColumn FROM Stuff))
WHERE ISNULL(s,'') <> ''
И это не делает:
SELECT * FROM dbo.Split_temp(',', myColumn), Stuff
Документы говорят:
Когда пользовательская функция, которая возвращает таблицу, вызывается в предложении FROM подзапроса, аргументы функции не могут ссылаться на любые столбцы из внешнего запроса.
Тип результата, который я ищу, будет выглядеть примерно так:
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
.
.
.
Есть ли какой-нибудь способ (кроме, конечно, курсора), чтобы выполнить это?
(редактировать)
В соответствии с запросом MarlonRibunal примерная таблица для получения вышеуказанного результата выглядит следующим образом:
id myColumn
----------- -------------------------------------------
22268 22351,22354,22356,22357,22360,
24104 22353,22355,22356,22358,22360,22362,22364,
id
является int
; myColumn
является varchar(max)
.