2016-11-15 6 views
1

트리거 내에서 GROUP BY 절이있는 임시 테이블을 만들고 사용해야하므로 어려움이 있습니다.TRIGGER 내에서 GROUP BY로 임시 테이블 만들기

내 시도 : 내가 끝에 도달 트리거 이후 삭제됩니다 두 개의 임시 테이블을 사용하기 위해 노력하고있어 여기에

.

먼저 나는 #Temptable과 방아쇠를 만듭니다.

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

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

삽입 된 테이블 만 현재 INSERTUPDATE 문 제가 #TempTableINSERT 여러 및 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은 어떻게 만듭니 까?

+0

임시 테이블 대신 실제 테이블을 사용하지 않는 이유는 무엇입니까? '# '가있는 임시 테이블은 세션 외부에서 작동하지 않습니다. – Esty

+0

@TanjimRahman 세션 외부에서 임시 테이블을 사용할 필요가 없습니다. 내가 말했듯이, 방아쇠가 지속되는 동안에 만. – Jazz

+0

이중 파운드 기호 '## TempGroupTable'사용 – Rene

답변

2

당신이 무엇을 하려는지는 확실하지 않지만, ##으로 시작하는 글로벌 임시 테이블은 어떻게 작동합니까? 따라서 #TempGroupTable##TempGroupTable으로 만드시겠습니까?

0

왜 임시 테이블과 변수의 모든 오버 헤드를 제거하지 않습니까? 시도해보십시오 :

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