【问题标题】:Inserting multiple value in table with String input使用字符串输入在表中插入多个值
【发布时间】:2015-04-28 07:32:32
【问题描述】:

我将一个字符串传递给存储过程: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

【问题讨论】:

    标签: sql sql-server database stored-procedures


    【解决方案1】:

    由于您已经拆分为行,并且您希望通过拆分为两列来插入某个表,这可能是可行的

    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
    

    【讨论】:

      【解决方案2】:

      您也可以尝试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
      

      【讨论】:

        【解决方案3】:

        使用子字符串和字符索引:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-08-18
          • 2020-04-13
          • 2021-10-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-10-19
          • 1970-01-01
          相关资源
          最近更新 更多