私は行SQL Serverのインポート行の文字列テーブルの列に
"[0,0,0,1,2,4,1,0,0,2,0,0,0,0,847,18207,0,0,0,0,0,0,0,0,0,0,0,0]"
あたり以下のテキストを含むテーブルを持っている今、私は28 列を含むテーブルにこれらの28個の値を挿入します。私はいくつかの分割関数を試しましたが、これらは行だけを返します。
アイデア?
私は行SQL Serverのインポート行の文字列テーブルの列に
"[0,0,0,1,2,4,1,0,0,2,0,0,0,0,847,18207,0,0,0,0,0,0,0,0,0,0,0,0]"
あたり以下のテキストを含むテーブルを持っている今、私は28 列を含むテーブルにこれらの28個の値を挿入します。私はいくつかの分割関数を試しましたが、これらは行だけを返します。
アイデア?
INSERT INTO a_table (col1, col2, col3, . . .)
SELECT dbo.fnParseString(-1, ',', str)
,dbo.fnParseString(-2, ',', str)
,dbo.fnParseString(-3, ',', str)
,....
FROM yourtable
スプリッタは良いアプローチですが、参照したスプリッタはひどく非効率です。文字列を分割するためにループする必要はありません。 http://sqlperformance.com/2012/07/t-sql-queries/split-stringsまたはこちらをご覧ください。 http://www.sqlservercentral.com/articles/Tally+Table/72993/ –
これらは、CSVを行に分割します。 OPは列 – Squirrel
に必要です。しかし、そのためのループは必要ありません。クロス集計またはピボットを使用して列に戻すことができます。これは、XMLスプリッタにとって素晴らしい時間です。 –
DECLARE @x XML
;with cte as (
SELECT '[0,0,0,1,2,4,1,0,0,2,0,0,0,0,847,18207,0,0,0,0,0,0,0,0,0,0,0,0]' as col
)
SELECT @x= (
SELECT CAST('<s>' + REPLACE(REPLACE(REPLACE(col,'[','<a>'),']','</a>'),',','</a><a>') +'</s>'AS XML)
FROM cte
FOR XML PATH('')
)
SELECT t.v.value('a[1]','int'),
t.v.value('a[2]','int'),
t.v.value('a[3]','int'),
...
t.v.value('a[28]','int')
FROM @x.nodes('/s') as t(v)
を使用してSQL Serverには、 "文字列配列" の概念がありません。データは実際にどのように格納されていますか? –
as nvarchar(256) – phicon
は、分割関数を使用し、その結果を動的にピボットします。 –