需要查询以将列表传递给 SQL 服务器中的存储过程

Need query to pass list to stored procedure in SQL Server

我是 sql 服务器的新手,需要帮助创建查询以使用存储过程在一次调用中将所有数据插入 table。 例如,我有 1 个用户(比如 "Tech" 的 ID 为 1)和客户列表("C#"、"ASP"、"MVC")。
我的 Table 结构 编号 (PK),
UserId(FK)
客户 varchar.

接受的结果像
UserId-----|-----客户
1 ----------|----- C#
1 ----------|----- ASP
1 ----------|----- MVC

我会将用户 ID 和客户列表传递给我的 SP。

执行此操作的一种方法如下。我假设你输入了这样的格式 @userId=1 , @ListOfSubjects ='asp,c#' .. 这是示例过程。这个想法是首先将 list od comma separated string ofsubject 转换为 table 然后插入它。为此,我创建了一个示例 UDF,当将逗号分隔的字符串传递给它时,它将重新调整 table .

        create proc SampleUser_Insert 
         @UserId int , 
        @ListOfSubjects varchar(1000)
        as
        begin

             --set @UserId=1
             --set @ListOfSubjects ='asp,c#,mvc'


             declare @sampleTable table (userId int, subjects varchar(100))

             insert into    @sampleTable (userId,subjects )

             SELECT @userId, data FROM dbo.[SplitString](@ListOfSubjects, ',')
             select * from @sampleTable

        end

    --  exec SampleUser_Insert 1,'a,b,c'

udf如下

    CREATE FUNCTION [dbo].[SplitString]
    (
        @String NVARCHAR(4000),
        @Delimiter NCHAR(1)
    )
    RETURNS TABLE
    AS
    RETURN
    (
        WITH Split(stpos,endpos)
        AS(
            SELECT 0 AS stpos, CHARINDEX(@Delimiter,@String) AS endpos
            UNION ALL
            SELECT endpos+1, CHARINDEX(@Delimiter,@String,endpos+1)
                FROM Split
                WHERE endpos > 0
        )
        SELECT 'Id' = ROW_NUMBER() OVER (ORDER BY (SELECT 1)),
            'Data' = SUBSTRING(@String,stpos,COALESCE(NULLIF(endpos,0),LEN(@String)+1)-stpos)
        FROM Split
    )
    GO