我有一個包含每行下列文字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
使用分割函數,然後動態調整其結果。 –