ALTER TRIGGER [dbo].[tr_M_Products_ForUpdate]
ON [dbo].[M_Products]
FOR UPDATE
AS
BEGIN
DECLARE @TableName AS VARCHAR(50)
DECLARE @DatabaseName AS VARCHAR(50)
SELECT @DatabaseName= dbo.LogDataBaseName()
SET @TableName = @DatabaseName + '.dbo.M_products_Log'
DECLARE @Query AS VARCHAR(100)
SET @Query = ' INSERT INTO '+ @TableName + ' SELECT * FROM deleted '
EXEC (@Query)
END
我收到错误:
删除了无效的对象名称
如何解决此错误?
答案 0 :(得分:3)
虽然你可以使用" special"触发器中名为inserted
和deleted
的表格,您无法在触发器调用的其他批次中使用这些表格。
执行动态sql代码正是另一个新批处理,因此无法从那里访问deleted
表。
可能的解决方案:首先将deleted
表中的所有数据插入临时表,然后使用此表。可以通过嵌套批处理调用访问临时表。
因此您可以将查询更改为
select * into #temp_deleted from deleted
SET @Query = ' INSERT INTO '+ @TableName + ' SELECT * FROM #temp_deleted '
EXEC (@Query)