需要在SQL Server中查询将列表传递给存储过程。

4 浏览
0 Comments

需要在SQL Server中查询将列表传递给存储过程。

我是SQL Server的新手,需要帮助创建一个查询,使用存储过程将所有数据一次性插入到表中。

例如,我有一个用户(假设名为"Tech",ID为1),以及一个客户列表("C#","ASP","MVC")。

我的表结构如下:

Id(主键),

UserId(外键),

Customers(字符串类型)。

期望的结果如下:

UserId----|-----Customers

1 ----------|----- C#

1 ----------|----- ASP

1 ----------|----- MVC

我将向我的存储过程传递userId和客户列表。

0
0 Comments

在SQL Server中,如果需要将列表传递给存储过程,可以按照以下步骤进行操作。假设输入格式为=1,='asp,c#'。首先创建一个示例存储过程,其思路是先将逗号分隔的字符串转换为表,然后进行插入操作。为此,创建一个示例UDF函数,当传递逗号分隔的字符串时,该函数将返回一个表。

以下是示例存储过程的代码:

create proc SampleUser_Insert 
      @userId int, 
     @subjects varchar(1000)
as
begin
     declare @subjectTable table (userId int, subjects varchar(100))
     insert into @subjectTable (userId,subjects )
     SELECT @userId, data FROM dbo.[SplitString](@subjects, ',')
     select * from @subjectTable
end

以下是示例的UDF函数代码:

CREATE FUNCTION [dbo].[SplitString]
(
     @string NVARCHAR(4000),
     @separator NCHAR(1)
)
RETURNS TABLE
AS
RETURN
(
    WITH Split(stpos,endpos)
    AS(
        SELECT 0 AS stpos, CHARINDEX(@separator,@string) AS endpos
        UNION ALL
        SELECT endpos+1, CHARINDEX(@separator,@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

通过以上步骤,我们可以在存储过程中传递列表,并将其插入到表中。执行示例存储过程时,需要传递两个参数,即userId和subjects。其中subjects参数应该是逗号分隔的字符串。

欢迎进行愉快的编码!

0