私は以下のストアドプロシージャを持っていますが、私はT-SQLを初めて使っていて、その構文についてはあまりよく分かりません。いくつか私に少し説明できますか?私はこのTSQLコードを説明できますか?
質問:
- 何のために#tmp構文立つのでしょうか?
- c.RootCategoryIの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
hmm ...ドロップテーブルはそれほど冗長ではありません。このコードが接続を開いたままにしておくサーバによって実行されると、一時テーブルが構築されます。 – gjvdkamp
@gjvdkamp - ローカルの一時テーブルは、格納されたprocが終了すると、ストアドプロシージャ内で作成された場合は、接続が閉じられているときではなく、実際には削除されます。 –