如何在sql存储过程的'In'子句中传递字符串数组

Ubi*_*ers 3 sql-server stored-procedures sql-server-2008

我在数据库中有用户表存储用户信息.我想创建存储过程,我将把UserID作为列表传递.我想使用此列表从用户表中获取数据.

我使用以下查询创建类型作为表:

CREATE TYPE dbo.MyUserIDs AS TABLE (UserID int)
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

当我执行此代码时,我收到以下错误:

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

我关注此链接作为参考: 参考链接

我在sql server中直接执行存储过程
在此输入图像描述

jpw*_*jpw 6

我不认为你可以使用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 
Run Code Online (Sandbox Code Playgroud)