【发布时间】:2014-04-11 08:24:39
【问题描述】:
当我尝试在父存储过程中使用子存储过程时,我得到了:
An INSERT EXEC statement cannot be nested
因此,我开始在 CTE 中重复代码,而不是调用子存储过程。这是代码:
SET @Sql = N'
;WITH MonthsAndYears AS
(
SELECT
TOP (DATEDIFF(MONTH, @FromDate, @ToDate) + 1)
[TheMonth] = MONTH(DATEADD(MONTH, number, @FromDate)),
[TheYear] = YEAR(DATEADD(MONTH, number, @FromDate)),
[Date] = DATEADD(month, DATEDIFF(month, 0, DATEADD(MONTH, number, @FromDate)), 0)
FROM [master].dbo.spt_values
WHERE [type] = N''P''
)
...
我以前用过:
CREATE TABLE #MonthsAndYears ([Month] INT, [Year] int, [Date] SMALLDATETIME)
INSERT INTO #MonthsAndYears EXEC Logi_GetMonthsAndYears @FromDate, @ToDate
并在我后续的 cte 代码中引用了#MonthsAndYears(存储过程与 cte 完全相同)。问题是当我使用没有临时表的 cte 方法时,查询的执行速度要慢得多。为什么是这样?
【问题讨论】:
标签: sql-server tsql sql-server-2005