2016-04-04 106 views
1

我有一個包含每行下列文字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個值的表。我嘗試了幾個拆分函數,但這些只會返回行。

任何想法?

+0

SQL Server有沒有 「字符串數組」 的概念。數據如何實際存儲? –

+0

as nvarchar(256) – phicon

+0

使用分割函數,然後動態調整其結果。 –

回答

3

使用dbo.fnParseString()

INSERT INTO a_table (col1, col2, col3, . . .) 
SELECT dbo.fnParseString(-1, ',', str) 
     ,dbo.fnParseString(-2, ',', str) 
     ,dbo.fnParseString(-3, ',', str) 
     ,.... 
FROM yourtable 
+0

我同意分離器是一個很好的方法,但你引用的分離器是非常低效的。你不需要求解循環來分割字符串。 http://sqlperformance.com/2012/07/t-sql-queries/split-strings或這裏。 http://www.sqlservercentral.com/articles/Tally+Table/72993/ –

+0

那些將CSV分割成行。 OP需要在列 – Squirrel

+0

右邊。但你不需要一個循環。您可以使用交叉表或數據透視表將它們還原爲列。這對於一個XML分離器來說是個好時機。 –

1
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)