使用 GROUP BY 在 TRIGGER 中创建临时 table

Creating a temporary table within a TRIGGER with GROUP BY

我需要在触发器中创建并使用带有 GROUP BY 子句的临时 table,但我在这样做时遇到了困难。

我的尝试:

我在这里尝试使用两个临时 tables,它们在触发器结束后被丢弃。

首先我创建了一个 #Temptable 和触发器。

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

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

由于插入的 table 仅包含当前 INSERTUPDATE 语句的行,我将几个 INSERTUPDATE 语句传递给 #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)

现在我想使用这些数据创建一个临时 table 来对 #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

不确定您要做什么,但是以 ## 开头的全局临时表是否适合您?所以把 #TempGroupTable 变成 ##TempGroupTable?

为什么不免除临时表和变量的所有开销?尝试:

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