需要使用逗号分隔的字符串在表中插入多行的解决方案。我能够在一列中插入表格

时间:2018-04-09 05:48:51

标签: sql-server

Declare @Var varchar(MAX)
        Set @Var = '1,2,3'
        DECLARE @XML AS XML
        DECLARE @Delimiter AS CHAR(1) =','
        SET @XML = CAST(('<X>'+REPLACE(@Var,@Delimiter ,'</X><X>')+'</X>') AS XML)      

    Declare @Var1 nvarchar(MAX)
    Set @Var1 = '10,11,12'
    DECLARE @XML1 AS XML
    DECLARE @Delimiter1 AS CHAR(1) =','
    SET @XML1 = CAST(('<X>'+REPLACE(@Var1,@Delimiter1 ,'</X><X>')+'</X>') AS XML)
DECLARE @temp TABLE (ID INT,ID1 INT);
    INSERT INTO @temp (ID,ID1) values   

    (SELECT N.value('.', 'INT') AS ID FROM @XML.nodes('X') AS T(N),
    SELECT N1.value('.', 'INT') AS ID1 FROM @XML1.nodes('X') AS T(N1))

    select * from  @temp

1 个答案:

答案 0 :(得分:0)

您有两个逗号分隔值,但它们之间没有关系。我使用SQl函数在Row_number下面查询,并且任意加入两个逗号分隔的结果。请检查 -

Declare @Var varchar(MAX)
    Set @Var = '1,2,3'

    DECLARE @XML AS XML
    DECLARE @Delimiter AS CHAR(1) =','
    SET @XML = CAST(('<X>'+REPLACE(@Var,@Delimiter ,'</X><X>')+'</X>') AS XML)

    Declare @Var1 nvarchar(MAX)
    Set @Var1 = '10,11,12'

    DECLARE @XML1 AS XML
    DECLARE @Delimiter1 AS CHAR(1) =','
    SET @XML1 = CAST(('<X>'+REPLACE(@Var1,@Delimiter1 ,'</X><X>')+'</X>') AS XML)

    DECLARE @temp TABLE (ID INT,ID1 INT);

    INSERT INTO @temp (ID,ID1)
    SELECT
        X.ID, Y.ID1
    from
        (SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS RowId,N.value('.', 'INT') AS ID FROM @XML.nodes('X') AS T(N)) as X
    INNER JOIN
        (SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS RowId,N1.value('.', 'INT') AS ID1 FROM @XML1.nodes('X') AS T(N1)) as Y
        ON X.RowId = Y.RowId

    SELECT * FROM  @temp

注 - 上述查询存在一些问题,即第一个逗号分隔字符串的第一个值可以与第二个逗号分隔字符串的第三个值连接。