多対1の関係にT-SQLスプリット文字列?
-
11-09-2019 - |
質問
私は、次のSQLスクリプトを持っています:
DECLARE @temp table (
ID int IDENTITY(1, 1),
data nvarchar(100)
)
INSERT INTO @temp (data) VALUES ('a,b,c')
INSERT INTO @temp (data) VALUES ('d,e,f')
SELECT *
FROM @temp AS T
INNER JOIN
(SELECT *
FROM dbo.__StringSplit(T.data, ',', T.ID)) AS S
ON T.ID = S.RefID
!そして、上のクリックした後に実行し、私はこれらを得ます:
Line 17 The multi-part identifier "T.data" could not be bound.
私はまた、非加入バージョンを試してみましたが、同じエラーを持っています
SELECT T.ID, S.Item AS dataItem
FROM @temp AS T, dbo.__StringSplit(T.data, ',', T.ID) AS S
WHERE T.ID = S.RefID
...
の私は何を期待することは、私がtest.ID @から来るのIDを持つテーブルを取得しなければならないとする@ test.data内の各カンマ区切り値は、自身のレコードに分割し、その値がデータ項目欄に入れますということでした。の
どのように私はそれを達成することができますか?
私は、カーソルを使用するために必要なのですか?
私は http://pastebin.com/f7dd6350f <でDBO .__ StringSplitテーブル値関数の実装を貼り付けました/>
ありがとうございます。
解決
SQL2000では、カーソルを必要としています。 SQL2005 / 2008年、あなたはsatementを適用CROSSを使用することができます。おそらく(ちょうど今テストすることはできません)、次のように:
SELECT T.ID, S.Item AS dataItem
FROM @temp AS T CROSS APPLY dbo.__StringSplit(T.data, ',', T.ID) AS S
<時間>
編集 - 私が見つかりました。<のhref = "http://www.sqlteam.com/article/using-cross-apply-in-sql-server-2005" のrel = "nofollowをnoreferrer 「> CROSS上のこのページではに適用し、思い付います:
SELECT T.ID, S.Item AS dataItem
FROM @temp AS T
CROSS APPLY
dbo.__StringSplit(T.data, ',', T.ID) AS S
WHERE T.ID = S.RefID
私の問題を解決: - )
他のヒント
あなたの分割文字列関数が本当に遅いです、ここでは1はるかに高速にするリンクがあります:
所属していません StackOverflow