Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

crear un trigger cada vez que se cree una tabla en sql server 2005

Estas en el tema de crear un trigger cada vez que se cree una tabla en sql server 2005 en el foro de Bases de Datos General en Foros del Web. Hola a todos. Necesito hacer un trigger de base de datos que permita que cada vez que se creen ciertas tablas inmeditamente cree un trigger ...
  #1 (permalink)  
Antiguo 22/01/2011, 09:34
Avatar de johnsinapsis  
Fecha de Ingreso: febrero-2010
Mensajes: 19
Antigüedad: 14 años, 2 meses
Puntos: 0
De acuerdo crear un trigger cada vez que se cree una tabla en sql server 2005

Hola a todos.

Necesito hacer un trigger de base de datos que permita que cada vez que se creen ciertas tablas inmeditamente cree un trigger DML, pero aún no logro porque me sale un error de sintaxis.

CREATE TRIGGER TablasMM
ON DATABASE
FOR CREATE_TABLE
AS
BEGIN
DECLARE @TabName Sysname
SELECT @TabName=EventData().value('(/EVENT_INSTANCE/ObjectName)[1]','sysname')
IF (@TabName like 'MM2%')
BEGIN
CREATE TRIGGER T_MM201101
ON MM201101
FOR INSERT
AS
DECLARE @cuenta CHAR(15)
DECLARE @tipcom CHAR(5)
DECLARE @numcom CHAR(10)
DECLARE @ingreso CHAR(10)
DECLARE @valid int
DECLARE @valor NUMERIC(10,2)
SET @cuenta = (SELECT CPCCODCUE FROM Inserted)
SET @tipcom = (SELECT CCDCODCOM FROM Inserted)
SET @numcom = (SELECT CCMNUMCOM FROM Inserted)
SET @valor = (SELECT CMMVALCRE FROM Inserted)
SET @tercero = (SELECT TERCODTER FROM Inserted)
SET @fecha = (SELECT CCMFECCOM FROM Inserted)
SET @detalle = (SELECT CMMDETMOV FROM Inserted)
SET @numreg = (SELECT CMMNUMREG FROM Inserted)
IF (@cuenta = '41200201') AND (@tipcom = '012')
BEGIN
SET @ingreso = (SELECT AINCONSEC FROM SLFACTUR WHERE (CCMNUMCOM = @numcom))
SET @valid = (SELECT COUNT(*) AS CANT
FROM(
SELECT AINCONSEC, SOSORDSER, SIPCODIGO, SUM(SPHCANSER * (SPHTOTENT + SPHTOTPAC)) AS VALOR
FROM SLPAQHOJ
WHERE (AINCONSEC = @ingreso) AND (SPHCANSER > 0) AND (GASCODIG1 = '2001') AND CCCCODCEN = '23'
GROUP BY AINCONSEC,SOSORDSER, SIPCODIGO
HAVING (SUM(SPHCANSER * (SPHTOTENT + SPHTOTPAC))=@valor)
) AS A)
IF(@valid>0)
BEGIN
IF exists(select * from MM201101 WHERE CCDCODCOM='012' AND CCMNUMCOM = @numcom AND CPCCODCUE = '41250204' AND CCCCODCEN = '23')
BEGIN

UPDATE MM201101 SET CMMVALCRE = CMMVALCRE+@valor WHERE CCDCODCOM='012' AND CCMNUMCOM = @numcom AND CPCCODCUE = '41250204'
AND CCCCODCEN = '23'
END
ELSE
BEGIN

UPDATE MM201101 SET CPCCODCUE = '41250204' WHERE CCDCODCOM='012' AND CCMNUMCOM = @numcom AND CPCCODCUE = '41200201'
AND CCCCODCEN = '23'
END
END
END
END
END

Al ejecutarlo, sale estos errores:

Mens 156, Nivel 15, Estado 1, Procedimiento TablasMM, Línea 10
Sintaxis incorrecta cerca de la palabra clave 'TRIGGER'.
Mens 137, Nivel 15, Estado 1, Procedimiento TablasMM, Línea 24
Debe declarar la variable escalar "@tercero".
Mens 137, Nivel 15, Estado 1, Procedimiento TablasMM, Línea 25
Debe declarar la variable escalar "@fecha".
Mens 137, Nivel 15, Estado 1, Procedimiento TablasMM, Línea 26
Debe declarar la variable escalar "@detalle".
Mens 137, Nivel 15, Estado 1, Procedimiento TablasMM, Línea 27
Debe declarar la variable escalar "@numreg".

De manera que entiendo que es incorrecta la manera de ejecutar el trigger a partir de la definición de otro. Les agradezcon en lo que me puedan colaborar.
  #2 (permalink)  
Antiguo 24/01/2011, 10:07
 
Fecha de Ingreso: febrero-2009
Mensajes: 312
Antigüedad: 15 años, 2 meses
Puntos: 4
Respuesta: crear un trigger cada vez que se cree una tabla en sql server 2005

Hola has probado a realizarlo en 2 SP´S? pasando parámetro Tipo:

CREATE TRIGGER TablasMM
ON DATABASE
FOR CREATE_TABLE
AS
BEGIN
DECLARE @TabName Sysname
SELECT @TabName=EventData().value('(/EVENT_INSTANCE/ObjectName)[1]','sysname')
IF (@TabName like 'MM2%')
exec SP2 @Tabname
end



Saludos
  #3 (permalink)  
Antiguo 25/01/2011, 10:28
Avatar de johnsinapsis  
Fecha de Ingreso: febrero-2010
Mensajes: 19
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: crear un trigger cada vez que se cree una tabla en sql server 2005

mmmm, no había pensado en eso. Es una buena idea, gracias por la ayuda.

Etiquetas: 2005, desencadenador, disparador, server, sql, trigger
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:45.