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.
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