IF anidados en TRIGGER SQL

publicado por: Anonymous

Debo hacer un trigger que no permita alterar tablas que se encuentran registradas dentro de una tabla específica.

Para esto, lo que estuve pensando es realizar un IF que pregunte si el nombre de la base, el del schema y el nombre de la tabla estan alojados de dicha tabla.

Aca va parte del codigo:

IF @DB IN (SELECT [DB] FROM Management.deployer.CriticalTables) 
    AND @SCHEMA IN (SELECT [SCHEMA] FROM Management.deployer.CriticalTables)
        AND @NAME IN (SELECT [NAME] FROM Management.deployer.CriticalTables)

(Las variables estan todas declaradas)
La cuestion es que por ejemplo, si dentro de la tabla tengo:

BD:      schema:    tabla:
manag      TM       prueba
manag      TM       prueba2
manag      TD       prueba

Al modificar la primera tabla (manag.TM.prueba), el trigger no salta y se modifica la tabla.

¿Alguna solución?

PD: También probé con lo siguiente

IF @DB IN (SELECT [DB] FROM Management.deployer.CriticalTables) 
    BEGIN
    IF @SCHEMA IN (SELECT [SCHEMA] FROM Management.deployer.CriticalTables)
        BEGIN
        IF @NAME IN (SELECT [NAME] FROM Management.deployer.CriticalTables)
            BEGIN
            PRINT 'ERROR'
        END
    END
END

solución

La solución no es un if anidado, ya que debes buscar una coincidencia exacta de las tres condiciones, por ejemplo así:

if exists (select 1 
             from Management.deployer.CriticalTables
            where DB = @DB
              and SCHEMA = @SCHEMA
              and NAME = @NAME)
begin
  print 'la tabla SI existe en Management.deployer.CriticalTables';
else
  print 'la tabla NO existe en Management.deployer.CriticalTables';
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *