2010-12-15 127 views
1

我得到了下面的存儲過程,但我是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 

回答

3

#tmp是本地臨時表,例如它只對創建它的連接可見,並且一旦該連接消失,臨時表也是如此。因此最後DROP TABLE #tmp確實不是必需的 - 該表將由SQL Server自動刪除。

該臨時表是在這裏創造:

SELECT * INTO #tmp FROM dbo.fnGetCategories(@prewin7) 

所以它將包含任何結果從dbo.fnGetCategories存儲功能設定將返回行。

SELECT 
    c.RootCategoryId CategoryId, 
    SUM(c.DiagnosticCount) DiagnosticCount 
FROM #tmp c 

在這裏,數據是從臨時表,其具有c表別名選自 - 因此,因此,即c.RootCategoryId必須是臨時表的列,因此它必須是即行的一個從上面存儲的函數返回。

+0

嗯...下拉表不是那麼多。如果此代碼由保持連接打開的服務器執行,則可以建立臨時表。 – gjvdkamp 2010-12-15 09:56:32

+1

@gjvdkamp - 當存儲的proc退出時,如果它們是在存儲過程中創建的,而不是在連接關閉時,實際上會刪除本地臨時表,所以它仍然是多餘的。 – 2010-12-15 10:13:17

0

你真的需要臨時表嗎?

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 (select * FROM dbo.fnGetCategories(@prewin7)) c 
     GROUP BY c.RootCategoryId 
    ) g 
    INNER JOIN (select * FROM dbo.fnGetCategories(@prewin7)) c ON c.CategoryId = g.CategoryId 
    ORDER BY c.CategoryName 
+0

如果您發佈的是代碼或XML,**請**在文本編輯器中突出顯示這些行,然後單擊編輯器工具欄上的「代碼」按鈕(101 010)以精確地設置格式並對其進行語法突出顯示! – 2010-12-15 09:54:14

+1

對不起,我是一個「新手」;-) – 2010-12-15 16:30:58

+0

沒問題 - 下一次你知道:-) – 2010-12-15 16:41:20

相關問題