我得到了下面的存儲過程,但我是T-SQL的新手,不太清楚它的語法。有些人可以向我解釋一下嗎?有人可以爲我解釋這個TSQL代碼嗎?
問:
- 什麼是#tmp語法代表什麼?
- c.RootCategoryId中的c在哪裏定義?
下面的代碼:
ALTER PROCEDURE [dbo].[GetAllTopCategories]
@prewin7 bit
AS
SELECT * INTO #tmp FROM dbo.fnGetCategories(@prewin7)
SELECT
c.RootCategoryId CategoryId,
c.CategoryName + ' [' + CAST(g.DiagnosticCount AS nvarchar(max)) + ']' CategoryName,
@prewin7 as PreWin7
FROM (
SELECT
c.RootCategoryId CategoryId,
SUM(c.DiagnosticCount) DiagnosticCount
FROM #tmp c
GROUP BY c.RootCategoryId
) g
INNER JOIN #tmp c ON c.CategoryId = g.CategoryId
ORDER BY c.CategoryName
DROP TABLE #tmp
嗯...下拉表不是那麼多。如果此代碼由保持連接打開的服務器執行,則可以建立臨時表。 – gjvdkamp 2010-12-15 09:56:32
@gjvdkamp - 當存儲的proc退出時,如果它們是在存儲過程中創建的,而不是在連接關閉時,實際上會刪除本地臨時表,所以它仍然是多餘的。 – 2010-12-15 10:13:17