表类型传递给SP的多值参数在SELECT查询的WHERE子句中可以使用TVP吗?
例如:
SELECT * FROM PRODUCTS
WHERE ProductCategoryId IN @tvpCategories
我的意思是,与其使用子查询(示例如下),我们可以使用TVP吗?
SELECT * FROM PRODUCTS
WHERE ProductCategoryId IN (SELECT Id from ProductCategories)
感谢你的帮助
发布于 2018-01-26 01:04:01
您可以使用like:
SELECT * FROM PRODUCTS
WHERE ProductCategoryId IN (SELECT Id from @tvpCategories)
表值参数在表中,对于编程来说,你可以把它们当作临时表存储在内存中,直到执行范围完成。
发布于 2018-01-26 01:11:34
如果您不想使用子查询,那么联接将是另一种选择。
SELECT PRODUCTS.*
FROM @tvpCategories categories
LEFT JOIN PRODUCTS on PRODUCTS.ProductCategoryId = categories.id
发布于 2018-01-26 01:05:50
使用表值参数与使用表变量类似,只是表值参数是只读的。
这意味着您可以使用带有in
运算符的子查询:
SELECT *
FROM PRODUCTS
WHERE ProductCategoryId IN (SELECT Id from @tvpCategories)
或者使用join:
SELECT *
FROM PRODUCTS
INNER JOIN @tvpCategories tvp ON ProductCategoryId = tvp.Id
https://stackoverflow.com/questions/48448146
复制相似问题