如何将多个唯一标识符传递给存储过程

时间:2012-03-30 13:10:23

标签: sql-server stored-procedures

  

可能重复:
  Parameterizing an SQL IN clause?

您好我们如何向存储过程发送多个uniqueidentifier。

例如:

Create procedure showall
(@empids uniqueidentifier(50) )
as
select * from emp where empid in (@empid)
像这样?

2 个答案:

答案 0 :(得分:2)

正如迭戈所提到的,你可以使用表值参数。下面是一个示例,说明如何使用表值参数对内部联接对照传递的列表,从而相应地过滤列表。

    create procedure showall
    (
     @empids uniqueidentifier(50)
    ,@myTableVariable mySchema.myTableType readonly
    )
as 
    select
        *
    from
        emp e
        inner join @myTableVariable m
        on e.empids = m.empids

    --where
    --  empid in ( @empid )

如果您从未使用过表值参数,那么它可能会有点混乱。您需要创建user defined table type。正如创建的部分所示,一旦创建了表结构,您就可以返回,然后将参数类型定义为表值参数。

create type mySchema.myTableName as table
( empids uniqueidentifier)

然后在第一个代码示例中的参数子句中引用它。希望这会有所帮助,它在我第一次使用它时会让我感到困惑,但它确实可以很方便并减少应用程序的行程。

答案 1 :(得分:0)

多个参数可以作为逗号(或任何其他符号)分隔的字符串传递,然后在proc中处理或作为table-valued parameter

处理