WHERE子句中的SQL SERVER表值参数(表类型)

时间:2018-01-25 16:53:16

标签: sql sql-server

传递给SP的表类型多值参数 你能在SELECT查询的WHERE子句中使用TVP吗?

例如:

SELECT * FROM PRODUCTS 
WHERE ProductCategoryId IN @tvpCategories

我的意思是,我们可以使用TVP而不是子查询(如下所示)吗?

SELECT * FROM PRODUCTS 
WHERE ProductCategoryId IN (SELECT Id from ProductCategories)

感谢您的帮助

3 个答案:

答案 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