我有一个包含两个字段名称和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个。
由于
答案 0 :(得分:6)
INSERT INTO dbo.MyTable(Name, ID)
SELECT @Name,
id
FROM dbo.Split(@CSVID)