2017-10-06 101 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

好的,让我试着对你的进步发表评论。再次感谢。 –