【问题标题】:How to pass string array in 'In' clause in sql stored procedure如何在sql存储过程的'In'子句中传递字符串数组
【发布时间】:2016-02-22 09:23:15
【问题描述】:

我在存储用户信息的数据库中有用户表。我想创建存储过程,我将在其中将 UserIDs 作为列表传递。我想使用这个列表从用户表中获取数据。

我正在使用以下查询将类型创建为表:

CREATE TYPE dbo.MyUserIDs AS TABLE (UserID int)

现在我在存储过程中使用这种类型:

ALTER PROCEDURE [dbo].[Test_in_Query]
    @MyUserids MyUserIDs READONLY 
AS
BEGIN
    SET NOCOUNT ON;
    SELECT * From Tbl_UserMast where UserID in (select UserID from @MyUserids)
END

当我执行此代码时,出现以下错误:

操作数类型冲突:int 与 MyUserIDs 不兼容

我正在关注此链接作为参考: Reference link

我是在sql server中直接执行存储过程

【问题讨论】:

  • 好问题。您能否提供一个示例说明您如何调用该过程,以便我们拥有minimal reproducible example
  • 使用表值参数。
  • 对不起,“使用表值参数”是什么意思?

标签: sql-server sql-server-2008 stored-procedures


【解决方案1】:

我认为您不能使用 SSMS gui 传递 TVP 值(或者至少我不知道如何做),但您必须在 t-sql 代码中进行,如下所示:

-- declare a variable using the user-defined type
DECLARE @MyUsers MyUserIDs 

-- insert some data into it
INSERT INTO @MyUsers(UserID) VALUES (1),(2),(4) 

-- and pass it into the proc
EXEC Test_in_Query @MyUserids = @MyUsers 

【讨论】:

  • 好的。那是工作。我的SP是正确的。只是错误地传递了值。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2013-07-29
  • 1970-01-01
  • 1970-01-01
  • 2014-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多