NOVOTS KMS 词汇表 Glossary    联系我们 Contact Us
查询 Search  
   
按类别浏览 Browse by Category
NOVOTS KMS .: 数据库 .: CTE 公共表的应用

CTE 公共表的应用

with
cr as
(
select CountryRegionCode from person.CountryRegion where Name like 'C%'
)

select * from person.StateProvince where CountryRegionCode in (select * from cr)


后面需要直接使用公共表cr,

这就是公用表表达式(CTE),使用CTE,可以使SQL语句的可维护性,同时,CTE要比表变量的效率高得多。

同时如果CTE与数据库的表名字相同则会优先使用这个CTE表


注意点

1. 如果将 CTE 用在属于批处理的一部分的语句中,那么在它之前的语句必须以分号结尾,如下面的SQL所示:

declare @s nvarchar(3)
set @s = 'C%'
; -- 必须加分号
with
t_tree as
(
select CountryRegionCode from person.CountryRegion where Name like @s
)
select * from person.StateProvince where CountryRegionCode in (select * from t_tree)


2. 多个CTE 表中间需要 “ , ” 分隔

with
t_tree as
(
select CountryRegionCode from person.CountryRegion where Name like @s
),

t_tree1 as
(
select CountryRegionCode from person.CountryRegion where Name like @s
)

3.使用与层级结构的选择,如省市县镇关系的查询


WITH #feedback
AS ( SELECT CategoryId ,
CategoryName ,
ParentId
FROM dbo.Product_Category AS pc WITH ( NOLOCK )
WHERE CategoryId = 231029
UNION ALL
SELECT pc2.CategoryId ,
pc2.CategoryName ,
pc2.ParentId
FROM #feedback
INNER JOIN dbo.Product_Category AS pc2
WITH ( NOLOCK ) ON #feedback.ParentId = pc2.categoryId
)
--,
--#feedback1
--AS (SELECT FeedbackFieldId FROM dbo.FeedbackField AS ff WITH (NOLOCK))
SELECT *
FROM #feedback


这篇文章对你多有用?

用户评语

添加评语
当前还没有评语.


.: .: .: .: .:
[ 登陆 ]
北京护航科技有限公司 2006

Novots Technologies Limited