Sql server 在CTE之后更新并选择-SQL Server
我试图创建一个包含CTE的视图。我的总体目标是从CTE中选择最大日期,但如果该日期为空,则将其转换为DATETIME,并通过将日期与CTE进行比较,最终选择大于最大日期的日期 我知道这听起来令人困惑,但以下是我的疑问(希望更清楚):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以返回正确的值,您就不需要更新了
;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