Sql server 使用CSV插入

Sql server 使用CSV插入,sql-server,Sql Server,我有一个带有两个字段Name和ID的表。 Name来自输入参数@Name,ID来自CSV@CSVID。 我有一个spilt函数,它返回一个临时表 我的存储过程是 INSERT INTO dbo.MyTable ( Name, ID ) VALUES ( (SELECT @Name, id FROM dbo.Split(@CSVID)) ) 我的分割函数 ALTER FUNCTION [dbo].[Split] (@InStr VARCHAR(MAX)) RETU

我有一个带有两个字段Name和ID的表。 Name来自输入参数@Name,ID来自CSV@CSVID。 我有一个spilt函数,它返回一个临时表

我的存储过程是

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
我看到了很多例子,但都很复杂。我只是简单解释一下,如果子查询

SELECT * FROM dbo.Split(@CSVID)
返回多个值


谢谢

所以我从拆分函数返回id。并在insert中添加了来自dbo.Split(@CSVID)的SELECT id。它不起作用。你能指出我去了哪里吗wrong@Neha但是
是否从dbo.Split(@CSVID)中选择id
返回了什么?或者它抛出了一个错误?。函数表的实际列名是什么?如果我从dbo.Split('1,2')传递SELECT id,则为“是”。我得到值1和2。没有错误。但是,当我插入时,我得到错误“子查询返回的值超过1。当子查询后跟=、!=、=或子查询用作表达式时,这是不允许的。”@Neha我更新了我的答案,因此它使用
id
而不是
insertyourcolumnname here
,但您使用的是我发布的代码吗?,因为它和你的问题不同。我问你这个问题是因为我没有使用子查询,所以不确定你是从哪里得到这个错误的对不起,这是一个痛苦,但我不完全理解。在您发布的脚本中,@Name成为Select的一部分。现在,邮件问题中添加的拆分函数只返回id。这将如何工作。因此,我从拆分函数返回id。并在insert中添加了来自dbo.Split(@CSVID)的SELECT id。它不起作用。你能指出我去了哪里吗wrong@Neha但是
是否从dbo.Split(@CSVID)中选择id
返回了什么?或者它抛出了一个错误?。函数表的实际列名是什么?如果我从dbo.Split('1,2')传递SELECT id,则为“是”。我得到值1和2。没有错误。但是,当我插入时,我得到错误“子查询返回的值超过1。当子查询后跟=、!=、=或子查询用作表达式时,这是不允许的。”@Neha我更新了我的答案,因此它使用
id
而不是
insertyourcolumnname here
,但您使用的是我发布的代码吗?,因为它和你的问题不同。我问你这个问题是因为我没有使用子查询,所以不确定你是从哪里得到这个错误的对不起,这是一个痛苦,但我不完全理解。在您发布的脚本中,@Name成为Select的一部分。现在,邮件问题中添加的拆分函数只返回id。这将如何工作。
SELECT * FROM dbo.Split(@CSVID)
INSERT INTO dbo.MyTable(Name, ID)
SELECT  @Name,
        id
FROM dbo.Split(@CSVID)