Kul*_*MCA 5 trigger sql-server-2008 t-sql
我需要将表名从触发器传递到过程。
ALTER TRIGGER [dbo].[Trg_ProjectCreation]
ON [dbo].[Projects]
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON;
-- procedure call
exec Proc_Test @Tablename (not need to hardcode)
END
Run Code Online (Sandbox Code Playgroud)
我想知道有什么方法可以从触发器本身获取表名。我需要它是动态的,因为当表的名称更改时,我不想更改我的代码。
这可能不是解决您问题的最佳方法,但它肯定会实现既定目标。
ALTER TRIGGER [dbo].[Trg_ProjectCreation] ON [dbo].[Projects]
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON;
declare @TableName sysname
select @tablename = object_schema_name(parent_id) + '.' + object_name(parent_id)
from sys.triggers where object_id = @@PROCID
exec dbo.myProcedure @Tablename
END
GO
Run Code Online (Sandbox Code Playgroud)
更好的选择可能是更改触发器的创建方式,并手动放下名称(如果它适合您的场景),例如:
declare @tablename sysname, @sql nvarchar(max)
set @tablename = '[dbo].[myTableName]'
set @sql = 'ALTER TRIGGER [dbo].[Trg_ProjectCreation] ON ' + @tablename + '
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON;
exec dbo.myProcedure ' + @tablename + '
END
GO'
exec sp_executeSQL @sql
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20732 次 |
| 最近记录: |