获取更新/插入数据的表名

时间:2015-03-17 00:25:46

标签: sql sql-server tsql

有没有办法获取更新/插入数据的表名?

UPDATE
 a
SET
 a.Salary = a.Salary + 5000
FROM
 dbo.Employee a
INNER JOIN
 dbo.Status b
ON
 a.StatusID = b.ID
WHERE
 b.Description = 'Regular'

SELECT @@TableUpdated

输出应为Employee

2 个答案:

答案 0 :(得分:0)

这是一个黑客攻击,只能在触发器内完成,但你仍然可以尝试这个并且可以帮助某人获得一个想法:

CREATE TRIGGER z ON dbo.Employee
AFTER UPDATE
AS 
IF(UPDATE(a))
BEGIN
IF EXISTS(SELECT *
      FROM   INFORMATION_SCHEMA.COLUMNS
      WHERE  TABLE_NAME = 'Employee' 
             AND COLUMN_NAME = 'a') 
begin
SELECT 'Employee'
end
ELSE  // you can add more if statements
begin
SELECT 'Status'
END
end

创建触发器后,使用您在问题中提供的更新语句,触发器应返回表格的名称。

答案 1 :(得分:0)

您可以解析此sql查询以获取受影响的表的列表,如下所示:

sstupdate
 a(dbo.Employee)(tetUpdate)
   StatusID
   Salary
   Salary
 dbo.Employee(tetSelect)
 dbo.Status(tetSelect)
   ID
   Description