插入或更新后我有两个触发器,而不是插入。似乎后触发器未运行或发送正确的数据。
我已经验证了Z_UpdateStageTable存储过程和“替代插入”触发器的正确操作。删除而不是插入触发器没有任何影响。 After Insert,Update触发器一次正常工作,我没有对它进行任何更改。我尝试删除它并添加它,但它仍然无法运行或拥有正确的数据。
任何想法?
而不是插入:
ALTER TRIGGER [DeleteExistingFilter]
ON [dbo].[Z_MobileSyncFilters]
INSTEAD OF INSERT
AS
BEGIN
SET NOCOUNT ON;
DELETE FROM Z_MobileSyncFilters WHERE UserID = (SELECT UserID FROM INSERTED);
INSERT INTO Z_MobileSyncFilters
SELECT *
FROM INSERTED;
END
插入后,更新:
TRIGGER [UpdateStageTable]
ON [dbo].[Z_MobileSyncFilters]
AFTER INSERT,UPDATE
AS
BEGIN
SET NOCOUNT ON;
DECLARE @AllWos AS VARCHAR(5000);
DECLARE @PmWos AS VARCHAR(5000);
DECLARE @RepWos AS VARCHAR(5000);
SET @AllWos = (SELECT AllWos FROM INSERTED);
SET @RepWos = (SELECT AllWos FROM INSERTED);
SET @PmWos = (SELECT AllWos FROM INSERTED);
EXEC Z_UpdateStageTable @AllWos;
EXEC Z_UpdateStageTable @RepWos;
EXEC Z_UpdateStageTable @PmWos;
END
答案 0 :(得分:2)
SET
触发器的AFTER
部分是否有拼写错误?你在三个不同的变量中选择相同的东西。
我没有确认Z_UpdateStageTable
的行为,而是尝试用简单的东西(无参数的sql语句,例如)替换它来测试触发器是否被调用。可能没有用您认为的调用方式来调用sproc。
答案 1 :(得分:1)
等一下,如果用户ID是你的PK,那么Z_MobileSyncFilters还没有数据,这也是一个而不是触发器
这个wholw块没有做任何事情,你为什么需要这个触发器?
DELETE FROM Z_MobileSyncFilters WHERE UserID = (SELECT UserID FROM INSERTED);
INSERT INTO Z_MobileSyncFilters
SELECT *
FROM INSERTED;
你的第二个触发器是有缺陷的,因为如果你有多行操作它会失效
为什么你在这张桌子上有2个插入触发器(1个而不是1个)?
答案 2 :(得分:1)
您可以向触发器添加PRINT
语句,并从ManagementStudio / Enterprise Manager手动插入以查看触发器失败的位置。
当您在单个语句中插入多个记录时,我发现问题,因为SELECT FROM Inserted
将返回多于1条记录。
您还可以将SET
语句更新为SELECT @Var = AllWos FROM Inserted