web-dev-qa-db-fra.com

Comment pouvons-nous obtenir un nom de table à partir de la gâchette inside?

J'ai besoin de passer le nom de la table de la gâchette à la procédure.

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

Je veux savoir, c'est là que je peux obtenir un nom de table de déclencheur lui-même. J'ai besoin que cela soit dynamique car lorsque le nom de la table change, je ne veux pas changer mon code.

5
KuldipMCA

Cela pourrait ne pas être la meilleure approche pour faire face à votre problème, mais cela atteindra certainement l'objectif déclaré.

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

Une meilleure option peut être de modifier la manière dont la gâchette est créée et de mettre le nom manuellement (s'il convient à votre scénario), pour E.g.:

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
8
RoKa