【问题标题】:'Where in' T-SQL implementation'Where in' T-SQL 实现
【发布时间】:2010-10-21 04:55:13
【问题描述】:

我有一个存储过程,它接受许多输入参数,包括 @userID。

现在,在 SP 的核心中,我使用以下 Where close 从视图中进行选择:

Where userID = @userID

这很好用。现在我想传递多个用户以便能够像这样查询它:

where userID in (1,2,...)

如何从一个输入参数传递值 1,2?

谢谢

【问题讨论】:

  • 这已经在 SOOO 上被问过很多次了。您知道您可以搜索其他问题并阅读他们的答案吗?
  • @astander:好点。我想都没想就回答了……
  • @astandar / @mitch 一个很好的方法是链接到stackoverflow.com/questions/209686/… 或其他规范,因此它会显示在常见问题解答stackoverflow.com/tags/tsql/faq ... 或更新维基stackoverflow.com/tags/tsql/info 以包括它
  • 为什么不在表变量中传递用户 ID,例如@TuserID。在 sp 中,您可以在 @TuserID.UserID = userID 上进行内部连接 ​​@TuserID ...

标签: sql-server tsql


【解决方案1】:

创建函数拆分:

create FUNCTION [dbo].[Split]
(
       @List nvarchar(2000),
       @SplitOn nvarchar(5)
)
RETURNS @RtnValue table
(

       Id int identity(1,1),
       Value nvarchar(2000)
)
AS
BEGIN

   While (Charindex(@SplitOn,@List)>0)
   Begin
           Insert Into @RtnValue (value)
           Select  Value = ltrim(rtrim(Substring(@List,1,Charindex(@SplitOn,@List)-1)))
           Set @List = Substring(@List,Charindex(@SplitOn,@List)+len(@SplitOn),len(@List))
   End

   Insert Into @RtnValue (Value)
           Select Value = ltrim(rtrim(@List))

           Return

--select Value from dbo.Split('item1, item2, item3',',')
END
GO

并使用@PASS 调用该函数并在游标内使用它。

【讨论】:

    【解决方案2】:
    【解决方案3】:

    创建一个输入参数,它是一个表变量,并将数组作为您加入的表发送,而不是使用 in。在 BOL 中阅读有关此内容的信息,因为设置起来可能有点棘手。

    【讨论】:

      猜你喜欢
      • 2011-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多