首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >WHERE子句中的SQL SERVER表值参数(表类型)

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

Stack Overflow用户
提问于 2018-01-26 00:53:16
回答 3查看 622关注 0票数 1

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

例如:

代码语言:javascript
运行
复制
SELECT * FROM PRODUCTS 
WHERE ProductCategoryId IN @tvpCategories

我的意思是,与其使用子查询(示例如下),我们可以使用TVP吗?

代码语言:javascript
运行
复制
SELECT * FROM PRODUCTS 
WHERE ProductCategoryId IN (SELECT Id from ProductCategories)

感谢你的帮助

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-01-26 01:04:01

您可以使用like:

代码语言:javascript
运行
复制
SELECT * FROM PRODUCTS 
WHERE ProductCategoryId IN (SELECT Id from @tvpCategories)

表值参数在表中,对于编程来说,你可以把它们当作临时表存储在内存中,直到执行范围完成。

票数 1
EN

Stack Overflow用户

发布于 2018-01-26 01:11:34

如果您不想使用子查询,那么联接将是另一种选择。

代码语言:javascript
运行
复制
SELECT PRODUCTS.* 
FROM @tvpCategories categories 
LEFT JOIN PRODUCTS on PRODUCTS.ProductCategoryId = categories.id 
票数 2
EN

Stack Overflow用户

发布于 2018-01-26 01:05:50

使用表值参数与使用表变量类似,只是表值参数是只读的。

这意味着您可以使用带有in运算符的子查询:

代码语言:javascript
运行
复制
SELECT * 
FROM PRODUCTS 
WHERE ProductCategoryId IN (SELECT Id from @tvpCategories)

或者使用join:

代码语言:javascript
运行
复制
SELECT * 
FROM PRODUCTS 
INNER JOIN @tvpCategories tvp ON ProductCategoryId = tvp.Id
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48448146

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档