2016-11-15 2 views
1

Ich muss eine temporäre Tabelle mit GROUP BY Klausel innerhalb eines Triggers erstellen und verwenden, aber ich habe Schwierigkeiten damit.Erstellen einer temporären Tabelle in einem TRIGGER mit GROUP BY

Mein Versuch:

Hier Ich versuche, zwei temporäre Tabellen zu verwenden, die nach dem Abzug fallen gelassen werden, um ein Ende zu erreichen.

Zuerst erstelle ich einen #Temptable und den Auslöser.

CREATE TABLE #TempTable (admID smallint, diagID smallint); 

CREATE TRIGGER tr_newTest 
ON Adm_Diag 
FOR INSERT 
AS 
BEGIN 
... 
END 

Da die Tabelle enthält nur eingefügten Zeilen für einen aktuellen INSERT und UPDATE Aussagen Ich bin vorbei an mehreren INSERT und UPDATE Aussagen zu #TempTable.

DECLARE @admID smallint 
SELECT @admID = Adm_ID 
FROM inserted 

DECLARE @diagID smallint 
SELECT @diagID=Diag_ID 
FROM inserted 

INSERT INTO #TempTable VALUES (@admID, @diagID) 

Jetzt mit diesen Daten möchte ich eine temporäre Tabelle erstellen, dass Gruppen die Reihen von #TempTable:

SELECT * 
INTO #TempGroupTable 
FROM 
(
    SELECT admID, COUNT(*) as Diag 
    FROM #TempTable 
    GROUP BY admID 
) t1 
WHERE Diag > 2 

Das ganzen Skript

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 

Nach der Ausführung des Triggers ich einen Fehler :

Msg 208, Level 16, State 0, Line 41 Invalid object name '#TempGroupTable'.

Wie kann ich #TempGroupTable erstellen?

+0

Warum verwenden Sie nicht physische Tabelle anstelle von Temp-Tabelle. Temp-Tabelle mit '#' wird außerhalb der Sitzung nicht funktionieren. – Esty

+0

@TanjimRahman Ich muss nicht mit temporären Tabellen außerhalb der Sitzung arbeiten. Wie gesagt, nur für die Dauer des Triggers. – Jazz

+0

Verwenden Sie ein doppeltes Pfundzeichen, '## TempGroupTable' – Rene

Antwort

2

Nicht quote sicher, was Sie versuchen zu tun, aber würde eine globale temporäre Tabellen, die mit ## beginnt für Sie arbeiten? Also machen Sie die #TempGroupTable in ##TempGroupTable?

0

Warum nicht auf den Overhead von temporären Tabellen und Variablen verzichten? Versuchen Sie:

CREATE TRIGGER tr_newTest 
ON Adm_Diag 
INSTEAD OF INSERT 
AS 
BEGIN 

INSERT INTO Adm_Diag (adminID, Diag) 
SELECT admID, COUNT(*) as Diag 
FROM inserted 
GROUP BY admID 

END