我有一个包含两个字段名称和 ID 的表。名称来自输入参数@Name,ID 来自 CSV @CSVID。我有一个返回临时表的溢出函数。
我的存储过程是
INSERT INTO dbo.MyTable
(
Name,
ID
)
VALUES
(
(SELECT @Name, id FROM dbo.Split(@CSVID))
)
我的拆分功能
ALTER FUNCTION [dbo].[Split] (@InStr VARCHAR(MAX))
RETURNS @TempTab TABLE
(id int not null)
AS
BEGIN
;-- Ensure input ends with comma
SET @InStr = REPLACE(@InStr + ',', ',,', ',')
DECLARE @SP INT
DECLARE @VALUE VARCHAR(1000)
WHILE PATINDEX('%,%', @INSTR ) <> 0
BEGIN
SELECT @SP = PATINDEX('%,%',@INSTR)
SELECT @VALUE = LEFT(@INSTR , @SP - 1)
SELECT @INSTR = STUFF(@INSTR, 1, @SP, '')
INSERT INTO @TempTab(id) VALUES (@VALUE)
END
RETURN
END
所以我想要的是
说@Name = 'John Doe' @CSVID = '1,2'
然后我希望插入的结果是
Name ID
John 1
Jhon 2
我看到了很多例子,但它们都很复杂。我只是一个简单的解释,如果子查询插入是如何工作的
SELECT * FROM dbo.Split(@CSVID)
返回超过 1 个值。
谢谢