使用String输入在表中插入多个值

时间:2015-04-28 07:32:33

标签: sql sql-server database stored-procedures

我将一个字符串传递给存储过程:1:20,2:30,4:50 它包含id和适当的值。

如何在数据库中添加如下表所示的值。

ID      Value
1        20
2        30
4        50

我已经" stringSplit"功能完美的工作,并给出行值,有些人想这样:

1:20
2:30
4:50

任何人都可以帮我用任何解决方案将数据插入表中。

我已经尝试过这个解决方案了

insert <table> (colname) 
select y.item
from dbo.SplitString(@testString, ':') x
cross apply
dbo.SplitString(x.item, ',') y

但这将返回重复值,与id值一样多。

我的商店程序是

CREATE PROCEDURE [dbo].[temp_result_insert]
@dataString varchar(max)
AS
insert into tempTable(id,marks)
select x.Item,y.Item
from dbo.SplitStringVarcahr(@dataString, ':') x
cross apply
dbo.SplitStringVarcahr(x.Item,',') y
RETURN 0

3 个答案:

答案 0 :(得分:7)

由于您已经拆分成行,并且希望通过splliting到两列来插入某些表,这可能会有效

CREATE TABLE #Test(ID INT,Val INT)

declare @t table (val varchar(50))
insert into @t (val)values ('1:20,2:30,4:50')
declare @str varchar(max)

;with cte as (
SELECT   
     Split.a.value('.', 'VARCHAR(100)') AS String  
 FROM  (SELECT   
         CAST ('<M>' + REPLACE([val], ',', '</M><M>') + '</M>' AS XML) AS String  
     FROM  @t) AS A CROSS APPLY String.nodes ('/M') AS Split(a))
     INSERT INTO #Test 
     select SUBSTRING(String,0,CHARINDEX(':',String)),REVERSE(SUBSTRING(reverse(String),0,CHARINDEX(':',reverse(String)))) from cte 

     select * from #test

答案 1 :(得分:3)

您还可以尝试XML.nodes()和字符串函数来吐出数据。像这样的东西

DECLARE @var VARCHAR(100) = '1:20,2:30,4:50'
DECLARE @xml  xml = CONVERT(xml, '<r>' + REPLACE(@var,',','</r><r>') + '</r>')

SELECT LEFT(val,cindex - 1) c1,RIGHT(val,LEN(val) - cindex) c2
FROM
(
SELECT CHARINDEX(':',c.value('text()[1]','VARCHAR(100)')) cindex,c.value('text()[1]','VARCHAR(100)') val
FROM @xml.nodes('r') as t(c))c

答案 2 :(得分:0)

使用substring和Charindex:

SELECT Substring(col, 0, Charindex(col, ':') - 1)        AS id,
       Substring(col, Charindex(col, ':') + 1, Len(col)-Charindex(col, ':')) AS value
FROM   splittedtable