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

Ent*_*tes 6 sql database sql-server stored-procedures

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

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

ID      Value
1        20
2        30
4        50
Run Code Online (Sandbox Code Playgroud)

我已经有了"stringSplit"功能,它可以完美地运行并且放出行值,有些想法是这样的:

1:20
2:30
4:50
Run Code Online (Sandbox Code Playgroud)

谁能帮助我用任何解决方案将数据插入表中.

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

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

但这会返回重复值,而不是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
Run Code Online (Sandbox Code Playgroud)

moh*_*111 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
Run Code Online (Sandbox Code Playgroud)