Sql server 在CTE之后更新并选择-SQL Server

Sql server 在CTE之后更新并选择-SQL Server,sql-server,common-table-expression,Sql Server,Common Table Expression,我试图创建一个包含CTE的视图。我的总体目标是从CTE中选择最大日期,但如果该日期为空,则将其转换为DATETIME,并通过将日期与CTE进行比较,最终选择大于最大日期的日期 我知道这听起来令人困惑,但以下是我的疑问(希望更清楚): 我认为在线阅读时,我不允许在CTE后进行更新和选择,那么我该怎么做呢?只要改进您的CTE以返回正确的值,您就不需要更新了 ;WITH cte (MaxDate) AS ( SELECT CASE WHEN MAX(dat

我试图创建一个包含CTE的视图。我的总体目标是从CTE中选择最大日期,但如果该日期为空,则将其转换为DATETIME,并通过将日期与CTE进行比较,最终选择大于最大日期的日期

我知道这听起来令人困惑,但以下是我的疑问(希望更清楚):


我认为在线阅读时,我不允许在CTE后进行更新和选择,那么我该怎么做呢?

只要改进您的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)

只要改进您的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)

您可以从CTE进行更新。但是这里不更新表字段,您更改了
Max()
值,并且您不能在cte之后进行更新和选择,只有一个您也不能在视图内部更新。@StuartAinsworth是的,如果最大值(日期)为如果为null,则所有字段都没有日期,那么您的查询将返回什么?@JamieD77 ServerA.tablename a ServerB.tablename您可以从CTE进行更新。但是这里不更新表字段,您更改了
Max()
值,并且您不能在cte之后进行更新和选择,只有一个您也不能在视图内部更新。@StuartAinsworth是的,如果最大值(日期)为如果为null,则所有字段都没有日期,那么您的查询究竟会返回什么?@JamieD77 ServerA.tablename a ServerB.tablename a