我是新來的存儲過程,並試圖爲學校項目創建一個。我編寫了一條SQL語句,它可以完成我想要的任務,並將其轉換爲存儲過程(可能是一個糟糕的黑客工作,但我們沒時間了,還有其他許多事情要做)。我們使用aspnet Membership Services和整個內置數據庫。aspnet數據庫中的存儲過程錯誤217:超出限制(32)?
我想要做什麼 我正在使用1個表(TimesheetEntry)。我想獲得所有員工的所有時間表,每週工作時間總計小時/周,並在過去4周(下週第1周 - 第4周)和過去4個月(第1 - 第4個月)以下重複此操作。我使用嵌套的select語句來執行此操作。
以下是完整的錯誤消息:
錯誤217:最大存儲過程,函數,觸發器,或視圖嵌套級別超出(極限32)。
以下是完整的存儲過程:
CREATE PROCEDURE sp_GetTimesheetSummaryReport2
@dateFor DATETIME
AS
SELECT CONVERT(VARCHAR, DATEADD(DAY, -7, GETDATE()), 111) AS startDate,
CONVERT(VARCHAR, GETDATE(), 111) AS currentDate,
projId, wpId, empId,
(
SELECT (SUM(mon) + Sum(tue) + Sum(wed) + Sum(thu) + SUM(fri) + SUM(sat) + SUM(sun)) AS Week
FROM TimesheetEntry
WHERE empId = t.empId AND tsDate BETWEEN @dateFor AND DATEADD(DAY, -7, @dateFor)
GROUP BY empId, projId, wpId
) AS week1,
(
SELECT (SUM(mon) + Sum(tue) + Sum(wed) + Sum(thu) + SUM(fri) + SUM(sat) + SUM(sun)) AS Week
FROM TimesheetEntry
WHERE empId = t.empId AND tsDate BETWEEN DATEADD(DAY, -7, @dateFor) AND DATEADD(DAY, -14, @dateFor)
GROUP BY empId, projId, wpId
) AS week2,
(
SELECT (SUM(mon) + Sum(tue) + Sum(wed) + Sum(thu) + SUM(fri) + SUM(sat) + SUM(sun)) AS Week
FROM TimesheetEntry
WHERE empId = t.empId AND tsDate BETWEEN DATEADD(DAY, -14, @dateFor) AND DATEADD(DAY, -21, @dateFor)
GROUP BY empId, projId, wpId
) AS week3,
(
SELECT (SUM(mon) + Sum(tue) + Sum(wed) + Sum(thu) + SUM(fri) + SUM(sat) + SUM(sun)) AS Week
FROM TimesheetEntry
WHERE empId = t.empId AND tsDate BETWEEN DATEADD(DAY, -21, @dateFor) AND DATEADD(DAY, -28, @dateFor)
GROUP BY empId, projId, wpId
) AS week4,
(
SELECT (SUM(mon) + Sum(tue) + Sum(wed) + Sum(thu) + SUM(fri) + SUM(sat) + SUM(sun)) AS Month
FROM TimesheetEntry
WHERE empId = t.empId AND MONTH(tsDate) = MONTH(@dateFor)
GROUP BY empId, projId, wpId
) AS month1,
(
SELECT (SUM(mon) + Sum(tue) + Sum(wed) + Sum(thu) + SUM(fri) + SUM(sat) + SUM(sun)) AS Month
FROM TimesheetEntry
WHERE empId = t.empId AND MONTH(tsDate) = MONTH(DATEADD(MONTH, -1, @dateFor))
GROUP BY empId, projId, wpId
) AS month2,
(
SELECT (SUM(mon) + Sum(tue) + Sum(wed) + Sum(thu) + SUM(fri) + SUM(sat) + SUM(sun)) AS Month
FROM TimesheetEntry
WHERE empId = t.empId AND MONTH(tsDate) = MONTH(DATEADD(MONTH, -2, @dateFor))
GROUP BY empId, projId, wpId
) AS month3,
(
SELECT (SUM(mon) + Sum(tue) + Sum(wed) + Sum(thu) + SUM(fri) + SUM(sat) + SUM(sun)) AS Month
FROM TimesheetEntry
WHERE empId = t.empId AND MONTH(tsDate) = MONTH(DATEADD(MONTH, -3, @dateFor))
GROUP BY empId, projId, wpId
) AS month4
FROM TimesheetEntry t
GROUP BY t.empId, t.projId, t.wpId
ORDER BY t.projId, t.wpId, t.empId;
EXECUTE sp_GetTimesheetSummaryReport '2011/02/01';
我的問題
爲什麼會出現這個錯誤?我是否有 超出堆棧,是否有太多 很多存儲 程序/觸發器/函數在 數據庫中,是我的嵌套太深?
我該如何解決?我的 存儲過程如此糟糕,我應該使用更好的語法重新啓動 ?
是sp_GetTimesheetSummaryReport哪裏遞歸?因爲,如果TimesheetEntry只是一個表格,我不會在這裏看到任何遞歸。 – 2011-03-29 20:00:53
哦!我的不好,我試着用一個子查詢創建另一個。他們是相關的。兩者都應該說sp_GetTimesheetSummaryReport沒有2. – Katheren 2011-03-29 20:07:10