0

我有一个包含两个字段名称和 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 个值。

谢谢

4

1 回答 1

6
INSERT INTO dbo.MyTable(Name, ID)
SELECT  @Name,
        id
FROM dbo.Split(@CSVID)
于 2013-05-03T21:39:57.690 回答