gpt4 book ai didi

使用 CTE 的 SQL Server 2008 动态查询

转载 作者:行者123 更新时间:2023-12-04 18:23:25 25 4
gpt4 key购买 nike

我正在尝试编写一个使用 CTE 的动态查询。但我面临问题 - 见下文这是一个简化的案例

declare @DynSql varchar(max)='';
declare @cnt as integer;
with months as (
select CAST('07/01/2010' as DATE) stdt
UNION ALL
SELECT DATEADD(MONTH,1,STDT) FROM months
WHERE DATEADD(MONTH,1,STDT)<CAST('06/30/2011' AS DATE)
)
select COUNT(*) from months
set @DynSql='select * from months'
exec (@DynSql)

这不起作用 - 我得到的错误是无效的对象名称“月”

有没有办法实现我想要的。如果我使用临时表或表变量,它会工作吗?

最佳答案

您的动态 SQL 不能引用 months。 CTE 的范围是单个语句:

with cte as (cte definiton) select from cte;

如果你想重新使用 CTE 的结果或定义,你必须在每次你想使用它时重新定义 CTE(例如在@DynSql 中)或者将它的结果具体化到一个表@variable 和重新使用表@variable。

关于使用 CTE 的 SQL Server 2008 动态查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3072893/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com