使用 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 仅包含当前 INSERT
和 UPDATE
语句的行,我将几个 INSERT
和 UPDATE
语句传递给 #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
我需要在触发器中创建并使用带有 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 仅包含当前 INSERT
和 UPDATE
语句的行,我将几个 INSERT
和 UPDATE
语句传递给 #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