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

Sql server 如何在'中传递字符串数组;在';sql存储过程中的子句,sql-server,sql-server-2008,stored-procedures,Sql Server,Sql Server 2008,Stored Procedures,我在数据库中有一个存储用户信息的用户表。我想创建一个存储过程,在这个存储过程中,我将以列表的形式传递用户ID。我想使用此列表从用户表中获取数据 我正在使用以下查询将类型创建为表: CREATE TYPE dbo.MyUserIDs AS TABLE (UserID int) 现在我在存储过程中使用这种类型: ALTER PROCEDURE [dbo].[Test_in_Query] @MyUserids MyUserIDs READONLY AS BEGIN SET NOCO

我在数据库中有一个存储用户信息的用户表。我想创建一个存储过程,在这个存储过程中,我将以列表的形式传递用户ID。我想使用此列表从用户表中获取数据

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

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与myuserid不兼容

以下链接仅供参考:

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

我认为您不能使用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是正确的。只是错误地传递了值。谢谢你的帮助。