在 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)
我正在尝试创建包含 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)