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)
由于您已经拆分成行,并且希望通过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)