0
 AFTER INSERT 
AS
BEGIN
DECLARE 
@p_newColorCode int

SET NOCOUNT ON;
SELECT @p_newColorCode = i.COLOR_CODE,
@p_newStateCode = i.STATE,
FROM inserted I

BEGIN TRANSACTION

IF @p_newColorCode IS NOT NULL
BEGIN
    INSERT INTO CALL_HISTORY(CALL_HISTORY_REC_NO,CHANGE_PERSON,CHANGE_DATE,CHANGE_TYPE,CHANGE)
    VALUES(@p_call_hist_rec_no,22,GETDATE(),@p_newPlateNo +': ADDED COLOR', dbo.fn_GetCodeDesc(@p_newColorCode))
END

出于某种原因,当 @p_newColorCode 为 NULL 时,它仍会进入 IF。我还需要做些什么来实现这一点吗?

提前感谢您的帮助。

SQL Server 2008 标准。

4

2 回答 2

1

你的触发器不好。切勿将标量变量设置为插入表中的字段,因为该表中可能有多个记录。SQL Server 触发器会为一组数据触发一次,而不是一次记录一条记录。此触发器将仅处理一条记录,因此需要使用连接进行完全重写。即使您认为只会输入一条记录,也总会有人需要进行批量插入。有一个只处理一条记录插入的触发器,最终会导致数据完整性问题,这是不负责任的。

但是,但是使用从插入的表中选择而不是插入中的值子句,您可以通过使用 where 子句仅包含字段不为空的记录来解决您的问题。

于 2013-05-29T18:05:03.817 回答
0

好的,在我的情况下,我应该在发布这个问题之前使用探查器,这是您如何检查变量上的空值,但在我的情况下,程序提供了一个 0 来代替空值。感谢您的帮助和建议。

于 2013-05-29T18:34:44.157 回答