存储过程参数包含多个值

时间:2012-01-06 16:47:14

标签: sql-server stored-procedures

我的存储过程参数包含两个以上的值(例如:创建存储过程recentAssetList @recentAssetList =(id1,id2,..))然后使用这些参数如何从表中获取数据?

2 个答案:

答案 0 :(得分:1)

SQL Server不支持该逻辑。以下是一些选项:

1。将它们分成许多参数

create procedure yourProc
    @FirstParam varchar(10),
    @SecondParam varchar(10)
as
    -- etc.
go

如果其中一些参数可能为null,则可以执行以下操作:

create procedure yourProc
    @FirstParam varchar(10) = null,
    @SecondParam varchar(10) = null
as
    select *
    from yourTable
    where
        ((@FirstParam is null) or (SomeCol1 = @FirstParam)) and
        ((@SecondParam is null) or (SomeCol2 = @SecondParam))
go

2。通过只读表

create type yourTableData 
as table
(
    id int not null
)
go

create procedure yourProc
    @yourInput yourTableData readonly
as

    select *
    from yourTable
    where id in
    (
        select id
        from @yourInput
    )
go

答案 1 :(得分:0)

你可以像这样使用分割函数并传递comcatenated string中的值:

CREATE function [dbo].[csv2tbl](@list nvarchar(max), @delimiter nvarchar(10))
returns @res table ([index] int PRIMARY KEY, col nvarchar(max))
AS BEGIN
with tbl_for_csv as
(
select 0 as [index] ,left(@list + @delimiter+@delimiter,charindex(@delimiter,@list + @delimiter+@delimiter) -1)as col,
right(@list + @delimiter+@delimiter,len(@list + @delimiter+@delimiter) - charindex(@delimiter,@list + @delimiter+@delimiter)) as Str
union all
select [index]+1, left(Str,charindex(@delimiter,Str) - 1)as Col,
right(Str,len(Str) - charindex(@delimiter,Str)) from tbl_for_csv
where len(right(Str,len(Str) - charindex(@delimiter,Str))) > 0
)
INSERT @res
select [index], col from tbl_for_csv option (MAXRECURSION 0);
return;
END

在sql2008 +中,你可以通过用户定义的表类型变量将值传递给SP(参见@Shark答案)