我有这个分割功能:
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') )
目标表有两列Key
和Description
。 Key
列来自其他标识列表,Description
列将从函数的结果插入一个子字符串。
该程序无法正常运作。
答案 0 :(得分:2)
无需使用VALUES
:
INSERT INTO table1 ([key], descrption)
SELECT
IDENT_CURRENT('table2'),
item
FROM dbo.SplitString('A,B,C', ',')
作为旁注,您的SplitString
功能并非最佳。你应该这样做是基于集合的时尚而不是RBAR。 Aaron Bertrand写了一篇关于分裂字符串的不同方法的文章。你可以阅读它here.