我在用于存储用户信息的数据库中有用户表。我想创建存储过程,我将把UserID作为列表传递。我想使用此列表从用户表中获取数据。
我使用以下查询创建类型为表:
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
答案 0 :(得分: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