2017-10-06 100 views
0

我在想是否有辦法像這樣將數據插入表中。將數據插入Tabla動態方式

我們suposse,我們有這個數據

array = ["hola","que","tal",""] 
array2 = ["saludos","amigos","",""] 
array3 = ["hi","friends","","","","Bye"] 

我想通過SP插入這個到SQL服務器

表的結構可能是這樣的塔布拉。

field1 | field2 | field3 | field 4 | field 5 | field6 | ...... | fieldn 

我該如何將數據插入此表中,記住字段的數量是動態的,每個數組中的這種變化。

提前感謝您的任何建議和幫助。

+0

該表應該是數據庫中的某個列或者您是否試圖將該數據保存到臨時表中。給我更清晰。數組列表可以傳遞字符串格式,然後將其拆分爲proc –

+0

@PrashantBamania感謝您的回答,以及這是一個表到我的數據庫中,所有字段都是varchar。這個想法是,如果我嘗試插入x字段,請在第一列中插入這些字段。 –

回答

0

如果你有列/位置的最大數量,也沒有必要去dynamc

我要補充,如果源字符串是在一個表中,這是很容易遷移到CROSS APPLY

實施例

DECLARE @S VARCHAR(MAX); 
SET @S='["hi","friends","","","","Bye"]' 


Select Pos1 = xDim.value('/x[1]','varchar(max)') 
     ,Pos2 = xDim.value('/x[2]','varchar(max)') 
     ,Pos3 = xDim.value('/x[3]','varchar(max)') 
     ,Pos4 = xDim.value('/x[4]','varchar(max)') 
     ,Pos5 = xDim.value('/x[5]','varchar(max)') 
     ,Pos6 = xDim.value('/x[6]','varchar(max)') 
     ,Pos7 = xDim.value('/x[7]','varchar(max)') 
     ,Pos8 = xDim.value('/x[8]','varchar(max)') 
From (Select Cast('<x>' + replace(replace(replace(replace(@S,'"]',''),'["',''),'"',''),',','</x><x>')+'</x>' as xml) as xDim) as A 

返回

Pos1 Pos2 Pos3 Pos4 Pos5 Pos6 Pos7 Pos8 
hi  friends       Bye  NULL NULL 
+0

感謝您的回答約翰,但如果我只發送4場/ Pos,這是如何的行爲。繼續工作? –

+0

@AndresClavijo剩下的就是NULL vaules –

+0

好的,讓我試着對你的進步發表評論。再次感謝。 –