Tom*_*Tom 2 t-sql sql-server triggers sql-server-2008
在这里使用Great Plains和我们的一个用户不断搞砸客户数据,因此我们想在客户表上设置一个触发器,这样我们就能找出它是谁.
无论如何,我创建了一个名为audit_RM00101的表,如下所示:
DATE nchar(10)
CUSTNMBR char(15)
CUSTNAME char(65)
UPSZONE char(3)
SALSTERR char(15)
USERID nchar(100)
Run Code Online (Sandbox Code Playgroud)
我想从我想要审计的表中捕获那些相同的字段,所以我按如下方式编写了触发器:
CREATE TRIGGER CatchCustomerRegionUpdate
ON RM00101
FOR UPDATE
AS
DECLARE @UserID VARCHAR(128)
SELECT @UserID = system_user
INSERT INTO audit_RM00101
SELECT DATE, CUSTNMBR, CUSTNAME, UPSZONE, SALSTERR, @UserID FROM UPDATED
Run Code Online (Sandbox Code Playgroud)
触发器创建得很好但是当我尝试通过更新Great Plains中的客户记录来测试它时,Great Plains会抛出一个丑陋的错误并且触发器不会被触发.
我在这做错了什么?
谢谢.
在一个触发器中,你得到DELETED和INSERTED表,没有UPDATED,所以替换FROM UPDATED为FROM INSERTED
还尝试修复你的USERID列,你audit_RM00101.USERID是一个nchar(100)虽然@UserID是一个VARCHAR(128).
编辑基于OP评论:啊,所以没有办法审核何时使用触发器更新表?
DELETED已填充,但INSERTED为空 DELETED使用原始值INSERTED填充,并使用新更新的值填充DELETED是空的,但INSERTED有新插入的值| 归档时间: |
|
| 查看次数: |
12707 次 |
| 最近记录: |