【发布时间】:2014-11-11 23:03:48
【问题描述】:
我在 SQL Server 2005 中创建了一个触发器,该触发器在源表中发生删除时将记录插入到历史表中。记录正在被插入,但并未从源表中删除。
这是我的触发器:
CREATE TRIGGER TRG_EdiHistory
ON dbo.EDI10000
INSTEAD OF DELETE
AS
BEGIN
SET NOCOUNT ON;
SET IDENTITY_INSERT dbo.EDI10500 ON;
INSERT INTO EDI10500(File_Id, Tp_Id, File_Name, File_Size, File_Data, Rec_Date, Content_Type, Update_Flag)
SELECT
File_Id, Tp_Id, File_Name, File_Size, File_Data,
Rec_Date, Content_Type, Update_Flag
FROM
DELETED
END
GO
我必须使用INSTEAD OF 触发器,因为我的表包含Image 类型的列。
请如果有人知道为什么会发生这种情况。
谢谢。
* 更新 *
CREATE TRIGGER TRG_EdiHistory
ON dbo.EDI10000
INSTEAD OF DELETE
AS
BEGIN
SET NOCOUNT ON;
SET IDENTITY_INSERT dbo.EDI10500 ON;
INSERT INTO EDI10500 ([File_Id],Tp_Id,[File_Name],File_Size
,File_Data,Rec_Date,Content_Type,Update_Flag)
SELECT [File_Id], Tp_Id, [File_Name], File_Size, File_Data,
Rec_Date, Content_Type, Update_Flag
FROM DELETED
DELETE FROM dbo.EDI10000
WHERE EXISTS (SELECT 1
FROM DELETED
WHERE [FILE_ID] = dbo.EDI10000.[File_Id])
END
GO
【问题讨论】:
-
嗯,你希望一个叫做“INSTEAD OF DELETE”的东西到底能做什么?
-
您需要
AFTER DELETE Trigger。其余的应该没问题。 -
你为什么使用图像数据类型?它自 2005 年以来已被弃用。请改用 varbinary(max)。
-
不能使用带有 Image 数据类型的 AFTER DELETE 触发器。并且不能更改为 varbinary(MAX) 因为它的 SQL 2005。试图将其更改为 varbinary(MAX) 但不允许我。
-
@hmakled: SQL Server 2005 DOES 支持
VARBINARY(MAX).... 您是如何尝试将数据类型更改为VARBINARY(MAX),到底发生了什么?跨度>
标签: sql sql-server sql-server-2005 database-trigger