CTE后的UPDATE和SELECT - SQL Server

时间:2016-01-14 18:30:45

标签: sql-server common-table-expression

我正在尝试创建一个包含CTE的视图。我的总体目标是从CTE中选择最大日期,但如果该日期为NULL,则将其转换为DATETIME,最后通过将日期与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之后进行更新和选择,所以我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

只需改善您的cte以返回正确的值,您就不需要更新

;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)