Tsql 未识别CTE

Tsql 未识别CTE,tsql,Tsql,为什么我的CTE无法从上次选择中访问?我特别问我是如何列出我的CTE的,我遗漏了一些简单的东西,比如我如何区分最后两个 with ParentsIdsWhoHaveInventoryWithManifests_CTE(brokerIds) as (...) ...) select someField from ParentsIdsWhoHaveInventoryWithManifests_CTE ;with SpecificBrokers

为什么我的CTE无法从上次选择中访问?我特别问我是如何列出我的CTE的,我遗漏了一些简单的东西,比如我如何区分最后两个

    with ParentsIdsWhoHaveInventoryWithManifests_CTE(brokerIds)
    as (...)
        ...)
        select someField from ParentsIdsWhoHaveInventoryWithManifests_CTE

    ;with SpecificBrokersTicketIds_CTE(ticketIds)
    as (...)
        select someFieldfrom ParentsIdsWhoHaveInventoryWithManifests_CTE

    ;with ProductionIdsWhichHaveManifests_CTE(productionIds)
    as (...)
        select productionIds from ProductionIdsWhichHaveManifests_CTE

    ;with InventoryRow_CTE(row)
    as (select row from Inventory where TicketId = @TicketId)

    ;with InvenotrySection_CTE(section)
    as (select section from Inventory where TicketId = @TicketId)


    select @ManifestId = ManifestId from Productions p where p.ProductionId = @ProductionId
    select @ProductionId as ProductionId_Used
    select @ManifestId as ManifestId_Used
    select @TicketId = TicketId from inventory where ProductionId = @ProductionId

...

update Venue_ManifestDetails
        set Row = row from InventoryRow_CTE,
        Section = section from InvenotrySection_CTE
        where TicketId = @TicketId

问题是它无法在我的update语句中识别InventoryRow\u CTE或InvenotrySection\u CTE。您只能在一个后续语句中使用CTE。不能在两个或多个语句中使用它

解释如下:

可以将公共表表达式CTE视为在单个SELECT、INSERT、UPDATE、DELETE或CREATE VIEW语句的执行范围内定义的临时结果集

如果要存储CTE的结果,请使用临时表或视图,并将CTE中的所有记录放入其中。

CTE只是语法 如果需要重复使用,请重复使用 我知道这看起来很奇怪,但事实就是这样 这只是语法复制粘贴


您可以使用temp或表格变量

您可以有一个“with”bur多个cte子句和一个“select”每个cte。这就是语法!CTE仅适用于后续声明。有关更多信息,请参见此:但我希望我的最后2个CTE摆脱这种模式并能够做到这一点,但您说这是不可能的?您需要使用视图或临时表-CTE只是声明后单个语句可用的临时视图。