需要查询以将列表传递给 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
我是 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