トリガー内でGROUP BY
句のテンポラリテーブルを作成して使用する必要がありますが、これは困難です。トリガー内のGROUP BYで一時テーブルを作成する
私の試み:
ここで私はトリガが最後に到達した後に廃棄された2つの一時テーブルを使用しようとしています。
まず、#Temptable
とトリガーを作成します。
CREATE TABLE #TempTable (admID smallint, diagID smallint);
CREATE TRIGGER tr_newTest
ON Adm_Diag
FOR INSERT
AS
BEGIN
...
END
のみ挿入テーブルは、私が#TempTable
にいくつかのINSERT
とUPDATE
文を渡している現在のINSERT
とUPDATE
文の行が含まれているため。
DECLARE @admID smallint
SELECT @admID = Adm_ID
FROM inserted
DECLARE @diagID smallint
SELECT @diagID=Diag_ID
FROM inserted
INSERT INTO #TempTable VALUES (@admID, @diagID)
は今、このデータを私は一時テーブルを作成したいというグループ#TempTable
の行:
SELECT *
INTO #TempGroupTable
FROM
(
SELECT admID, COUNT(*) as Diag
FROM #TempTable
GROUP BY admID
) t1
WHERE Diag > 2
スクリプト全体
CREATE TABLE #TempTable (admID smallint, diagID smallint);
CREATE TRIGGER tr_newTest
ON Adm_Diag
FOR INSERT
AS
BEGIN
DECLARE @admID smallint
SELECT @admID = Adm_ID
FROM inserted
DECLARE @diagID smallint
SELECT @diagID=Diag_ID
FROM inserted
INSERT INTO #TempTable VALUES (@admID, @diagID)
-- Below I'm tring to create #TempGroupTable
SELECT *
INTO #TempGroupTable
FROM
(
SELECT admID, COUNT(*) as Diag
FROM #TempTable
GROUP BY admID
) t1
WHERE Diag > 2
END
トリガを実行した後、私はエラーを取得する
:Msg 208, Level 16, State 0, Line 41 Invalid object name '#TempGroupTable'.
#TempGroupTable
を作成するにはどうすればよいですか?
なぜ、テンポラリテーブルの代わりに物理テーブルを使用していませんか。 '# 'のTempテーブルはセッションの外では動作しません。 – Esty
@TanjimRahman私は、セッションの外で一時テーブルで作業する必要はありません。私が言ったように、トリガーの期間だけ。 – Jazz
ダブルポンド記号 '## TempGroupTable'を使用してください – Rene