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)

 

arrow
arrow
    全站熱搜

    戮克 發表在 痞客邦 留言(0) 人氣()