如何执行此查询?

时间:2016-02-04 08:26:05

标签: sql sql-server tsql

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

我收到错误:

  

删除了无效的对象名称

如何解决此错误?

1 个答案:

答案 0 :(得分:3)

虽然你可以使用" special"触发器中名为inserteddeleted的表格,您无法在触发器调用的其他批次中使用这些表格。

执行动态sql代码正是另一个新批处理,因此无法从那里访问deleted表。

可能的解决方案:首先将deleted表中的所有数据插入临时表,然后使用此表。可以通过嵌套批处理调用访问临时表。

因此您可以将查询更改为

select * into #temp_deleted from deleted
SET  @Query = ' INSERT INTO '+ @TableName + ' SELECT * FROM #temp_deleted '
EXEC (@Query)