我有一个 UDT,它接收 2 个参数,即 ID 和质量
CREATE TYPE [dbo].[ItemUdt] AS TABLE(
[ID] [int] NOT NULL,
[Quality] [int] NULL
)
Run Code Online (Sandbox Code Playgroud)
此 UDT 将用作从表中过滤记录的条件
@ItemList AS ItemUdt READONLY
Run Code Online (Sandbox Code Playgroud)
我想要做的是获取与 ID 和质量都匹配的记录
SELECT * FROM tbl_Item
WHERE [ID] IN (SELECT ID FROM @ItemList)
AND [Quality] IN (SELECT Quality FROM @ItemList)
Run Code Online (Sandbox Code Playgroud)
但是,上面的查询将匹配包含来自 UDT 的所有质量的所有列出的 ID。例如,如果 UDT 由 (1001, 'Good'), (1002, 'Bad') 组成,则结果将显示所有带有 1001 和 1002 的 ID,以及质量为 'Good' 和 'Bad' 的。但我的预期结果如下:
SELECT * FROM tbl_Item
WHERE ([ID] = '1001' AND [Quality] = 'Good')
OR …Run Code Online (Sandbox Code Playgroud) sql-server ×1