Minimsdn.com為您提供的代碼:
WITH LSN AS( SELECT from_lsn = sys.fn_cdc_get_min_lsn(N'dbo_tb'), to_lsn = sys.fn_cdc_get_max_lsn() ), CHG_ALL AS( SELECT CHG.* FROM LSN CROSS APPLY cdc.fn_cdc_get_all_changes_dbo_tb(LSN.from_lsn, LSN.to_lsn, 'ALL UPDATE OLD') CHG ), CHG_NET AS( SELECT CHG.* FROM LSN CROSS APPLY cdc.fn_cdc_get_net_changes_dbo_tb(LSN.from_lsn, LSN.to_lsn, 'ALL') CHG ) SELECT * FROM CHG_ALL;
隨後細查了一下With 的用法:
WITH AS短語,也叫做子查詢部分(subquery factoring),可以讓你做很多事情,定義一個SQL片斷,該SQL片斷會被整個SQL語句所用到。
有的時候,是為了讓SQL語句的可讀性更高些,也有可能是在UNION ALL的不同部分,作為提供資料的部分。
特別對於UNION ALL比較有用。因為UNION ALL的每個部分可能相同,但是如果每個部分都去執行一遍的話,則成本太高,所以可以使用WITH AS短語,則只要執行一遍即可。
如果WITH AS短語所定義的表名被調用兩次以上,則優化器會自動將WITH AS短語所獲取的資料放入一個TEMP表裡,
如果只是被調用一次,則不會。而提示materialize則是強制將WITH AS短語裡的資料放入一個全域臨時表裡。很多查詢通過這種方法都可以提高速度。
WITH AS 語法:
[ WITH <common_table_expression> [ ,n ] ]
<common_table_expression>::=
expression_name [ ( column_name [ ,n ] ) ]
AS
( CTE_query_definition )
示例:
Minimsdn.com為您提供的代碼:
1 with 2 cr as 3 ( 4 select CountryRegionCode from person.CountryRegion where Name like 'C%' 5 ) 6 select * from person.StateProvince where CountryRegionCode in (select * from cr)
全站熱搜
留言列表