触发存储错误信息 [英] Trigger Storing wrong information

查看:83
本文介绍了触发存储错误信息的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Hello Everyone,



以下是我在SQL Server 2008上的触发器



  ALTER   TRIGGER  [dbo]。[Trigger_UpdateLeadMasters]  ON  [dbo]。[LeadMasters] 
FOR 更新
AS

DECLARE @ CompanyName nvarchar 50 );
DECLARE @ PersonName nvarchar 50 );
DECLARE @ Designation nvarchar 50 );
DECLARE @ Number nvarchar 50 );
DECLARE @ Number2 nvarchar 50 );
DECLARE @ Emailaddress nvarchar 50 );
DECLARE @ Address nvarchar (MAX);
DECLARE @ Address2 nvarchar (MAX);
DECLARE @ CityName nvarchar 50 );
DECLARE @ State nvarchar 50 );
DECLARE @ PinNumber nvarchar 50 );
DECLARE @ Product nvarchar 50 );
DECLARE @ RemarkNote nvarchar (MAX);
DECLARE @ Audit_Action varchar 100 );


选择 @ CompanyName = i.CompanyName 插入i ;
选择 @ PersonName = i.PersonName 插入i;
选择 @ Designation = i.Designation 插入i;
选择 @ Number = i.Number 插入i;
选择 @ Number2 = i.Number2 插入i;
选择 @ EmailAddress = i.EmailAddress 来自插入i;
选择 @地址= i.Address 来自插入i;
选择 @ Address2 = i.Address2 插入i;
选择 @ CityName = i.CityName 插入i;
选择 @ State = i.State 插入i;
选择 @PinNumber = i.PinNumber 来自插入i;
选择 @ Product = i.Product 插入i;
选择 @RemarkNote = i.RemarkNote 来自插入i;

IF 更新(CompanyName)
set @ Audit_Action = ' 名称已修改或更新'
IF UPDATE (PersonName)
set @ Audit_Action = ' 人名修改或更新'
IF 更新(指定)
set @ Audit_Action = ' 名称已修改或更新'
IF 更新(数字)
set @ Audit_Action = ' 第一个电话号码已修改或更新ed'
IF 更新(Number2)
set @ Audit_Action = ' 第二个电话号码已修改或更新'
IF 更新(EmailAddress)
set @ Audit_Action = ' 电子邮件地址已修改或更新'
< span class =code-keyword> IF 更新(地址)
set @ Audit_Action = ' 地址已修改或更新'
IF 更新(地址2)
设置 @ Audit_Action = ' 备用地址Modifi ed或Updated'
IF 更新(CityName)
< span class =code-keyword> set @ Audit_Action = ' 城市名称已修改或更新'
IF 更新(州)
设置 @ Audit_Action = ' 状态修改或更新'
< span class =code-keyword> IF UPDATE (PinNumber)
set @ Audit_Action = ' PinNumber已修改或更新'
IF 更新(产品)
set @ Audit_Action = ' 产品字段已修改或更新ed'
IF UPDATE (RemarkNote)
set @ Audit_Action = ' 备注注释已修改或更新'

插入 进入 LoggerLeadMasters(CompanyName,PersonName,Designation,Number,Number2, EmailAddress,Address,Address2,CityName,State,PinNumber,Product,RemarkNote,Audit_Action,Audit_Timestamp)
@CompanyName @ PersonName @ Designation @Number @ Number2 @ EmailAddress @Address @ Address2 @ CityName , @ State @ PinNumber @ Product @ RemarkNote @ Audit_Action ,GETDATE())





但问题是每当我修改LeadMasters表中的任何字段时,触发器就行了



< pre lang =SQL> IF UPDATE (RemarkNote)
set @ Audit_Action = ' 备注注意修改或更新'



并将错误信息存储到LoggerLeadMasters。任何人都可以帮我解决这个问题



谢谢

解决方案

如果它只用于单行更新

也许这样的事情

刚刚在记事本中完成,没有检查等。



ALTER TRIGGER [dbo]。[Trigger_UpdateLeadMasters] ON [dbo]。[LeadMasters]

FOR UPDATE

AS



IF EXISTS(

SELECT'名称已修改或更新'

FROM FROM i JOIN已删除d ON(/ *由UpdateLeadMasters的PK加入* /)

WHERE(i.CompanyName IS NULL且d.CompanyName IS NOT NULL)

OR(i.CompanyName IS NOT NULL且d.CompanyName IS NULL)

或(i.CompanyName IS NOT NULL且d.CompanyName IS NOT NULL

AND i.CompanyName<> d.CompanyName)



SET @AuditAction ='名称已修改或更新'



如果存在(

SELECT'人名被修改或更新'

FROM FROM i JOIN删除d ON(/ *由UpdateLeadMasters的PK加入* /)

WHERE(i.PersonName为空且d.PersonName不为空)

OR(i.PersonName IS非空且d.PersonName为空)

OR(i。 PersonName不是NULL而且d.PersonName不是NULL

AND i.PersonName<> d.PersonName)



SET @ AuditAction ='人名被修改或更新'



/ * ...等.. * /



插入LoggerLeadMasters(CompanyName,PersonName,Designation,Number,Number2,EmailAddress,Address,Address2,CityName,State,PinNumber,Product,RemarkNote,Audit_Action,Audit_Timestamp)

值(@ CompanyName,@ PersonName @名称,@号,@ NUMBER2,@ EmailAddress的,@地址@地址2,@ CITYNAME,@国@ PinNumber,@表示P roduct,@ RemarkNote,@ Audit_Action,GETDATE())


显然后面的Insert需要相应修改


Hello Everyone,

Following is my trigger on SQL Server 2008

ALTER TRIGGER [dbo].[Trigger_UpdateLeadMasters] ON [dbo].[LeadMasters]
FOR UPDATE
AS

DECLARE @CompanyName	nvarchar(50);	
DECLARE @PersonName	nvarchar(50);	
DECLARE @Designation	nvarchar(50);	
DECLARE @Number	nvarchar(50);	
DECLARE @Number2	nvarchar(50);	
DECLARE @Emailaddress	nvarchar(50);	
DECLARE @Address	nvarchar(MAX);	
DECLARE @Address2	nvarchar(MAX);	
DECLARE @CityName	nvarchar(50);	
DECLARE @State	nvarchar(50);	
DECLARE @PinNumber	nvarchar(50);	
DECLARE @Product	nvarchar(50);	
DECLARE @RemarkNote	nvarchar(MAX);
DECLARE @Audit_Action varchar(100);


select @CompanyName=i.CompanyName from inserted i;	
select @PersonName=i.PersonName from inserted i;		
select @Designation=i.Designation from inserted i;
select @Number=i.Number from inserted i;		
select @Number2=i.Number2 from inserted i;		
select @EmailAddress=i.EmailAddress from inserted i;		
select @Address=i.Address from inserted i;		
select @Address2=i.Address2 from inserted i;	
select @CityName=i.CityName from inserted i;		
select @State=i.State from inserted i;		
select @PinNumber=i.PinNumber from inserted i;	
select @Product=i.Product from inserted i;		
select @RemarkNote=i.RemarkNote from inserted i;

IF UPDATE(CompanyName)
set @Audit_Action=' Name Modified or Updated'
IF UPDATE(PersonName)
set @Audit_Action='Person Name Modified or Updated'
IF UPDATE(Designation)
set @Audit_Action='Designation Modified or Updated'
IF UPDATE(Number)
set @Audit_Action='1st Phone Number Modified or Updated'
IF UPDATE(Number2)
set @Audit_Action='2nd Phone Number Modified or Updated'
IF UPDATE(EmailAddress)
set @Audit_Action='Email Address Modified or Updated'
IF UPDATE(Address)
set @Audit_Action='Address Modified or Updated'
IF UPDATE(Address2)
set @Audit_Action='Alternate Address Modified or Updated'
IF UPDATE(CityName)
set @Audit_Action='City Name Modified or Updated'
IF UPDATE(State)
set @Audit_Action='State Modified or Updated'
IF UPDATE(PinNumber)
set @Audit_Action='PinNumber Modified or Updated'
IF UPDATE(Product)
set @Audit_Action='Product Field Modified or Updated'
IF UPDATE(RemarkNote)
set @Audit_Action='Remark Note Modified or Updated'

insert into LoggerLeadMasters(CompanyName,PersonName,Designation,Number,Number2,EmailAddress,Address,Address2,CityName,State,PinNumber,Product,RemarkNote,Audit_Action,Audit_Timestamp)
Values(@CompanyName,@PersonName,@Designation,@Number,@Number2,@EmailAddress,@Address,@Address2,@CityName,@State,@PinNumber,@Product,@RemarkNote,@Audit_Action,GETDATE())



But the problem is whenever I modify any field in LeadMasters Table, the trigger goes to line

IF UPDATE(RemarkNote)
set @Audit_Action='Remark Note Modified or Updated'


and stores wrong information to LoggerLeadMasters.Can anyone help me to fix this issue

Thanks

解决方案

If it is only ever for single-row updates
Maybe something like this
Just done in notepad, not checked etc.

ALTER TRIGGER [dbo].[Trigger_UpdateLeadMasters] ON [dbo].[LeadMasters]
FOR UPDATE
AS

IF EXISTS(
SELECT 'Name Modified or Updated'
FROM inserted i JOIN deleted d ON (/* join by PK of UpdateLeadMasters */)
WHERE (i.CompanyName IS NULL AND d.CompanyName IS NOT NULL)
OR (i.CompanyName IS NOT NULL AND d.CompanyName IS NULL)
OR (i.CompanyName IS NOT NULL AND d.CompanyName IS NOT NULL
AND i.CompanyName <> d.CompanyName)
)
SET @AuditAction = 'Name Modified or Updated'

IF EXISTS(
SELECT 'Person Name Modified or Updated'
FROM inserted i JOIN deleted d ON (/* join by PK of UpdateLeadMasters */)
WHERE (i.PersonName IS NULL AND d.PersonName IS NOT NULL)
OR (i.PersonName IS NOT NULL AND d.PersonName IS NULL)
OR (i.PersonName IS NOT NULL AND d.PersonName IS NOT NULL
AND i.PersonName <> d.PersonName)
)
SET @AuditAction = 'Person Name Modified or Updated'

/* ... etc ..*/

insert into LoggerLeadMasters(CompanyName,PersonName,Designation,Number,Number2,EmailAddress,Address,Address2,CityName,State,PinNumber,Product,RemarkNote,Audit_Action,Audit_Timestamp)
Values(@CompanyName,@PersonName,@Designation,@Number,@Number2,@EmailAddress,@Address,@Address2,@CityName,@State,@PinNumber,@Product,@RemarkNote,@Audit_Action,GETDATE())


Obviously the trailing Insert would need to modified accordingly


这篇关于触发存储错误信息的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆