以下是我而不是更新触发器的一部分
CREATE TRIGGER TestDemo ON Consultants1
INSTEAD OF UPDATE
AS
DECLARE @Sql nvarchar(200),
@TableName nvarchar(50),
@FieldName nvarchar(100),
@PKCols VARCHAR(1000), --Primary Key
@Value nvarchar(100)
SET @TableName = 'Consultants1'
SET @FieldName = 'DisplayName'
SET @Value = 'Test123'
SELECT * INTO #ins FROM inserted
SELECT @PKCols = c.COLUMN_NAME
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
WHERE pk.TABLE_NAME = @TableName
AND CONSTRAINT_TYPE = 'PRIMARY KEY'
AND c.TABLE_NAME = pk.TABLE_NAME
AND c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
SELECT @Sql = 'UPDATE ' + @TableName + ' SET '
SELECT @Sql = @Sql + @FieldName + ' = ''' + @Value + ''''
SELECT @Sql = @Sql + ' WHERE #ins.' + @PKCols + ' = ' + @TableName + '.' + @PKCols
EXEC (@Sql)
创建触发器时没有任何错误 . 现在我正在尝试执行以下查询
UPDATE Consultants1 SET DisplayName = 'abcd'
where ConsIntID = 'Test123285'
它给出了一个错误说:
Msg 4104, Level 16, State 1, Line 1
The multi-part identifier "#ins.ConsIntID" could not be bound.
我无法理解我的代码出错的地方 . 请帮忙
1 回答
您可以更改此行代码
对此
另一个故事是,在更改之后,您可能会收到错误:消息570,级别16,状态1,行1 INSTEAD OF触发器不支持直接递归 . 触发器执行失败 .
这是一篇关于INSTEAD OF触发器和递归的好文章in MSDN . 查看备注部分 .