传递给SP的表类型多值参数 你能在SELECT查询的WHERE子句中使用TVP吗?
例如:
SELECT * FROM PRODUCTS
WHERE ProductCategoryId IN @tvpCategories
我的意思是,我们可以使用TVP而不是子查询(如下所示)吗?
SELECT * FROM PRODUCTS
WHERE ProductCategoryId IN (SELECT Id from ProductCategories)
感谢您的帮助
答案 0 :(得分:2)
如果您不想使用子查询,则联接将是另一种选择。
SELECT PRODUCTS.*
FROM @tvpCategories categories
LEFT JOIN PRODUCTS on PRODUCTS.ProductCategoryId = categories.id
答案 1 :(得分:1)
您可以使用:
SELECT * FROM PRODUCTS
WHERE ProductCategoryId IN (SELECT Id from @tvpCategories)
表值参数在表中,对于编程,您可以将它们视为存储在内存中的临时表,直到执行范围完成。
答案 2 :(得分:1)
使用表值参数就像使用表变量一样,除了表值参数是只读的事实。
这意味着您可以使用in
运算符的子查询:
SELECT *
FROM PRODUCTS
WHERE ProductCategoryId IN (SELECT Id from @tvpCategories)
或使用联接:
SELECT *
FROM PRODUCTS
INNER JOIN @tvpCategories tvp ON ProductCategoryId = tvp.Id