dbo.Split()
from "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)
です。
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,'') <> ''
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))
それがカーソルを使うより良いかどうかはわかりません。