通过循环t-sql拆分参数和插入值

时间:2016-09-26 09:55:51

标签: sql-server loops tsql split

我需要拆分由|分隔的参数值,然后我需要将每个值插入表中

SELECT [value]
FROM STRING_SPLIT(@AtmRef, '|');

WHILE(@IND != LEN(@STR))
BEGIN
    INSERT INTO Monitoring (UserId, Name, Surname, Branch, AtmRef, CheckTime, Telephone, Email, DateCreated)
    VALUES (@UserId, @Name, @Surname, @Branch, @AtmRef, @CheckTime, @Telephone, @Email, GETDATE())
END

@userId@name等来自@AtmRef的值。现在STRING_SPLIT为我提供了一列中的所有值

我该怎么做?

1 个答案:

答案 0 :(得分:0)

您可以使用XML.nodes拆分字符串:

DECLARE @AtmRef nvarchar(max) = 'UserId|Name|Surname|Branch|AtmRef|CheckTime|Telephone|Email',
        @x xml

SELECT @x = CAST('<b>'+REPLACE(@AtmRef,'|','</b><b>')+'</b>' as xml)

INSERT INTO Monitoring (UserId, Name, Surname, Branch, AtmRef, CheckTime, Telephone, Email, DateCreated)
SELECT  t.v.value('b[1]', 'nvarchar(max)'),
        t.v.value('b[2]', 'nvarchar(max)'),
        t.v.value('b[3]', 'nvarchar(max)'),
        t.v.value('b[4]', 'nvarchar(max)'),
        t.v.value('b[5]', 'nvarchar(max)'),
        t.v.value('b[6]', 'nvarchar(max)'),
        t.v.value('b[7]', 'nvarchar(max)'),
        t.v.value('b[8]', 'nvarchar(max)'),
        GETDATE()
FROM @x.nodes('/') as t(v)

您需要使用正确的数据类型而不是nvarchar(max)