拆分后的字符串必须插入到表列中

时间:2016-01-29 06:56:21

标签: sql sql-server

我有这个分割功能:

CREATE FUNCTION SplitString
    (@Input NVARCHAR(MAX),
     @Character CHAR(1))
RETURNS @Output TABLE (Item NVARCHAR(1000))
AS
BEGIN
    DECLARE @StartIndex INT, @EndIndex INT

    SET @StartIndex = 1

    IF SUBSTRING(@Input, LEN(@Input) - 1, LEN(@Input)) <> @Character
    BEGIN
        SET @Input = @Input + @Character
    END

    WHILE CHARINDEX(@Character, @Input) > 0
    BEGIN
        SET @EndIndex = CHARINDEX(@Character, @Input)

        INSERT INTO @Output(Item)
            SELECT SUBSTRING(@Input, @StartIndex, @EndIndex - 1)

        SET @Input = SUBSTRING(@Input, @EndIndex + 1, LEN(@Input))
    END

    RETURN
END
GO

我想在存储过程中使用此函数,该过程正在执行插入:

INSERT INTO table1 (KEY, description) 
VALUES (SELECT Ident_current('table2'),
        SELECT item FROM webreports.Splitstring('A','B','C') )

目标表有两列KeyDescriptionKey列来自其他标识列表,Description列将从函数的结果插入一个子字符串。

该程序无法正常运作。

1 个答案:

答案 0 :(得分:2)

无需使用VALUES

INSERT INTO table1 ([key], descrption) 
SELECT 
    IDENT_CURRENT('table2'), 
    item 
FROM dbo.SplitString('A,B,C', ',')

作为旁注,您的SplitString功能并非最佳。你应该这样做是基于集合的时尚而不是RBAR。 Aaron Bertrand写了一篇关于分裂字符串的不同方法的文章。你可以阅读它here.