在 CTE 之后更新和 SELECT - SQL 服务器

UPDATE and SELECT after CTE - SQL Server

我正在尝试创建包含 CTE 的视图。我的总体目标是 select 来自 CTE 的最大日期,但如果该日期为 NULL,则将其转换为 DATETIME,最后 select 通过将日期与CTE。

我知道这听起来很混乱,但下面是我的查询(希望它更清楚):

;WITH cte (MaxDate) AS (
                    SELECT MAX(date) AS MaxDate
                        FROM ServerA.tableNameA
                    )

UPDATE cte
SET MaxDate = CONVERT(DATETIME, 0)
WHERE MaxDate IS NULL 

SELECT top 1000 c1, c2,..etc
    FROM ServerB.tableNameA
    WHERE date > (SELECT MaxDate    
                        FROM cte)

我想在网上看到我不允许在 CTE 之后进行更新和 SELECT,那么我该怎么做呢?

只需将您的 cte 提高到 return 正确的值,您就不需要更新了

;WITH cte (MaxDate) AS (
     SELECT CASE 
                 WHEN MAX(date) IS NULL THEN CONVERT(DATETIME, 0)
                 ELSE MAX(date)
            END AS MaxDate
     FROM ServerA.tableNameA
)
SELECT top 1000 c1, c2,..etc
FROM ServerB.tableNameA
WHERE date > (SELECT MaxDate    
              FROM cte)