Documente Academic
Documente Profesional
Documente Cultură
Los sistemas de bases de datos SQL usan ampliamente los disparadores, aunque
antes de SQL:1999 no fueron parte de la norma. Por desgracia, cada sistema de
bases de datos implement su propia sintaxis para los disparadores,
conduciendo a incompatibilidades. En la Figura 6.3 se describe la sintaxis
SQL:1999 para los disparadores (que es similar a la sintaxis de los sistemas de
bases de datos DB2 de IBM y de Oracle).
create trigger descubierto after update on cuenta
referencing new row as nfila
for each row
when nfila.saldo < 0
begin atomic
insert into prestatario
(select nombre-cliente, nmero-cuenta
from impositor
where nfila.nmero-cuenta = impositor.nmero-cuenta);
insert into prstamo values
(nfila.nmero-cuenta, nfila.nombre-sucursal, nfila.saldo)
update cuenta set saldo = 0
where cuenta.nmero-cuenta = nfila.nmero-cuenta
end
Sintaxis
-- SQL Server Syntax
Trigger on an INSERT, UPDATE, or DELETE statement to a table
or view (DML Trigger)
CREATE TRIGGER [ schema_name . ]trigger_name
ON { table | view }
[ WITH <dml_trigger_option> [ ,...n ] ]
{ FOR | AFTER | INSTEAD OF }
{ [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] }
[ WITH APPEND ]
[ NOT FOR REPLICATION ]
AS { sql_statement [ ; ] [ ,...n ] | EXTERNAL NAME <method
specifier [ ; ] > }
<dml_trigger_option> ::=
[ ENCRYPTION ]
[ EXECUTE AS Clause ]
<method_specifier> ::=
assembly_name.class_name.method_name
Trigger on a CREATE, ALTER, DROP, GRANT, DENY, REVOKE, or
UPDATE STATISTICS statement (DDL Trigger)
Sintaxis
-- Windows Azure SQL Database Syntax
Trigger on an INSERT, UPDATE, or DELETE statement to a table
or view (DML Trigger)
CREATE TRIGGER [ schema_name . ]trigger_name
ON { table | view }
[ WITH <dml_trigger_option> [ ,...n ] ]
{ FOR | AFTER | INSTEAD OF }
{ [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] }
AS { sql_statement [ ; ] [ ,...n ] [ ; ] > }
<dml_trigger_option> ::=
[ EXECUTE AS Clause ]
-- Windows Azure SQL Database Syntax
Trigger on a CREATE, ALTER, DROP, GRANT, DENY, REVOKE, or
UPDATE STATISTICS statement (DDL Trigger)
CREATE TRIGGER trigger_name
ON { DATABASE }
[ WITH <ddl_trigger_option> [ ,...n ] ]
{ FOR | AFTER } { event_type | event_group } [ ,...n ]
AS { sql_statement [ ; ] [ ,...n ] [ ; ] }
<ddl_trigger_option> ::=
[ EXECUTE AS Clause ]
Argumentos
schema_name
Es el nombre del esquema al que pertenece un desencadenador DML. Los desencadenadores DML tienen como
mbito el esquema de la tabla o la vista donde se crean.schema_name no se puede especificar para los
desencadenadores DDL o LOGON.
trigger_name
Es el nombre del desencadenador. El parmetro trigger_name debe cumplir con las reglas de los identificadores,
con la excepcin de que trigger_name no puede comenzar con los smbolos # o ##.
table | view
Es la tabla o vista en que se ejecuta el desencadenador DML; algunas veces se denomina tabla del
desencadenador o vista del desencadenador. Especificar el nombre completo de la tabla o vista es opcional. Solo
se puede hacer referencia a una vista mediante un desencadenador INSTEAD OF. No es posible definir
desencadenadores DML en tablas temporales locales o globales.
DATABASE
Aplica el mbito de un desencadenador DDL a la base de datos actual. Si se especifica, el desencadenador se
activa cada vez que event_type o event_group tienen lugar en la base de datos actual.
ALL SERVER
Aplica el mbito de un desencadenador DDL o logon al servidor actual. Si se especifica, el desencadenador se
activa cada vez que event_type o event_group tienen lugar en el servidor actual.
WITH ENCRYPTION
Ofusca el texto de la instruccin CREATE TRIGGER. El uso de WITH ENCRYPTION impide que el
desencadenador se publique como parte de la replicacin de SQL Server.WITH ENCRYPTION no se puede
especificar para desencadenadores CLR.
EXECUTE AS
Especifica el contexto de seguridad en el que se ejecuta el desencadenador. Permite controlar qu cuenta de
usuario utiliza la instancia de SQL Server para validar los permisos sobre cualquier objeto de base de datos al
que haga referencia el desencadenador.
Para obtener ms informacin, vea EXECUTE AS (clusula de Transact-SQL).
FOR | AFTER
AFTER especifica que el desencadenador DML solo se activa cuando todas las operaciones especificadas en la
instruccin SQL desencadenadora se han ejecutado correctamente. Adems, todas las acciones referenciales en
cascada y las comprobaciones de restricciones deben ser correctas para que este desencadenador se ejecute.
AFTER es el valor predeterminado cuando solo se especifica la palabra clave FOR.
Los desencadenadores AFTER no se pueden definir en las vistas.
INSTEAD OF
Especifica que se ejecuta el desencadenador DML en vez de la instruccin SQL desencadenadora, por lo que se
suplantan las acciones de las instrucciones desencadenadoras. INSTEAD OF no se puede especificar para los
desencadenadores DDL o logon.
Como mximo, se puede definir un desencadenador INSTEAD OF por cada instruccin INSERT, UPDATE o
DELETE en cada tabla o vista. No obstante, en las vistas es posible definir otras vistas que tengan su propio
desencadenador INSTEAD OF.
Los desencadenadores INSTEAD OF no se permiten en vistas actualizables que usan WITH CHECK
OPTION. SQL Server genera un error cuando se agrega un desencadenador INSTEAD OF a una vista
actualizable para la que se especific WITH CHECK OPTION. El usuario debe quitar esta opcin mediante
ALTER VIEW antes de definir el desencadenador INSTEAD OF.
{ [ DELETE ] [ , ] [ INSERT ] [ , ] [ UPDATE ] }
Especifica las instrucciones de modificacin de datos que activan el desencadenador DML cuando se intenta en
esta tabla o vista. Se debe especificar al menos una opcin. En la definicin del desencadenador se permite
cualquier combinacin de estas opciones, en cualquier orden.
Para los desencadenadores INSTEAD OF, no se permite la opcin DELETE en tablas que tengan una relacin
de integridad referencial que especifica una accin ON DELETE en cascada. Tampoco se permite la opcin
UPDATE en tablas que tengan una relacin referencial que especifique una accin ON UPDATE en cascada.
WITH APPEND
Especifica que debe agregarse un desencadenador adicional de un tipo existente. WITH APPEND no se puede
utilizar con desencadenadores INSTEAD OF o cuando se ha declarado AFTER explcitamente. WITH
APPEND solo se puede utilizar si se especific FOR (sin INSTEAD OF ni AFTER) por motivos de
compatibilidad con versiones anteriores. WITH APPEND no se puede especificar si se ha especificado
EXTERNAL NAME (es decir, si el desencadenador es de tipo CLR).
event_type
Es el nombre de un evento de lenguaje Transact-SQL que, despus de su ejecucin, hace que se active un
desencadenador DDL. Los eventos vlidos para los desencadenadores DDL se enumeran en Eventos DDL.
event_group
Es el nombre de un agrupamiento predefinido de eventos de lenguaje de Transact-SQL. El desencadenador DDL
se activa tras la ejecucin de cualquier evento de lenguaje Transact-SQL que pertenezca a event_group. Los
grupos de eventos vlidos para los desencadenadores DDL se enumeran en Grupos de eventos DDL.
Una vez que CREATE TRIGGER ha terminado de ejecutarse, event_group acta tambin como una macro
agregando los tipos de evento que abarca a la vista de catlogo sys.trigger_events.
NOT FOR REPLICATION
Indica que el desencadenador no debe ejecutarse cuando un agente de replicacin modifica la tabla involucrada
en el mismo.
sql_statement
Son las condiciones y acciones del desencadenador. Las condiciones del desencadenador especifican los
criterios adicionales que determinan si los intentos de los eventos DML, DDL o logon hacen que se lleven a
cabo las acciones del desencadenador.
Las acciones del desencadenador especificadas en las instrucciones Transact-SQL surten efecto cuando se
intenta la operacin.
Los desencadenadores pueden incluir cualquier nmero y clase de instrucciones Transact-SQL, con
excepciones. Para obtener ms informacin, vea la seccin Notas. Un desencadenador est diseado para
comprobar o cambiar los datos en base a una instruccin de modificacin o definicin de datos; no debe
devolver datos al usuario.Las instrucciones Transact-SQL de un desencadenador incluyen a menudo lenguaje de
control de flujo.
Los desencadenadores DML usan las tablas lgicas (conceptuales) deleted e inserted. Son de estructura similar a
la tabla en que se define el desencadenador, es decir, la tabla en que se intenta la accin del usuario. Las tablas
deleted e inserted guardan los valores antiguos o nuevos de las filas que la accin del usuario puede
cambiar. Por ejemplo, para recuperar todos los valores de la tabla deleted, utilice:
SELECT * FROM deleted;
Para obtener ms informacin, vea Usar las tablas insertadas y eliminadas.
Los desencadenadores DDL y logon capturan informacin acerca del evento desencadenador mediante el uso de
la funcin EVENTDATA (Transact-SQL). Para obtener ms informacin, vea Usar la funcin EVENTDATA.
SQL Server permite actualizar las columnas text, ntext o image mediante el uso del desencadenador INSTEAD
OF en tablas o vistas.
< method_specifier >
Ejemplos
A.Usar desencadenador DML con un mensaje de aviso
El siguiente desencadenador DML imprime un mensaje en el cliente cuando
alguien intenta agregar o cambiar datos en la tabla Customer de la base de datos
AdventureWorks2012.
IF OBJECT_ID ('Sales.reminder1', 'TR') IS NOT NULL
DROP TRIGGER Sales.reminder1;
GO
CREATE TRIGGER reminder1
ON Sales.Customer
AFTER INSERT, UPDATE
AS RAISERROR ('Notify Customer Relations', 16, 10);
GO
EXEC msdb.dbo.sp_send_dbmail
GO
@recipients = 'danw@Adventure-Works.com',
@subject = 'Reminder';
GO
CREATE
TRIGGER
Purchasing.LowCredit
Purchasing.PurchaseOrderHeader
AFTER INSERT
AS
IF EXISTS (SELECT *
FROM Purchasing.PurchaseOrderHeader AS p
ON
JOIN inserted AS i
ON p.PurchaseOrderID = i.PurchaseOrderID
JOIN Purchasing.Vendor AS v
ON v.BusinessEntityID = p.VendorID
WHERE v.CreditRating = 5
)
BEGIN
RAISERROR ('A vendor''s credit rating is too low to accept new
purchase orders.', 16, 1);
ROLLBACK TRANSACTION;
RETURN
END;
GO
-- This statement attempts to insert a row into the
PurchaseOrderHeader table
-- for a vendor that has a below average credit rating.
-- The AFTER INSERT trigger is fired and the INSERT transaction
is rolled back.
INSERT
INTO
Purchasing.PurchaseOrderHeader
(RevisionNumber, Status, EmployeeID,
VendorID, ShipMethodID, OrderDate, ShipDate, SubTotal,
TaxAmt, Freight)
VALUES (
2
,3
,261
,1652
,4
,GETDATE()
,GETDATE()
,44594.55
,3567.564
,1114.8638 );
GO
AS
RAISERROR ('You must disable Trigger "safety" to drop
synonyms!',10, 1)
ROLLBACK
GO
DROP TRIGGER safety
ON DATABASE;
GO
crear
un
disparador
dejar
un
disparador,
utilice
el CREATE
del
gatillo. Tambin
puede
crear
disparadores
la
columna
significa"el
valor
de
VISTAS
En los ejemplos propuestos hasta ahora se ha operado en el nivel del modelo
lgico. Es decir, se ha asumido que el conjunto de relaciones que se da son las
relaciones reales guardadas en la base de datos. No es deseable que todos los
usuarios puedan ver la totalidad del modelo lgico. Las consideraciones sobre
la seguridad pueden exigir que algunos datos queden ocultos para los usuarios.
Considrese una persona quenecesita saber el nmero de prstamo de un cliente
pero que no necesita ver el importe del prstamo. Esta persona debera ver una
relacin descrita en el lgebra relacional mediante.
Sintaxis
CREATE VIEW [ schema_name . ] view_name [ (column [ ,...n ] ) ]
[ WITH <view_attribute> [ ,...n ] ]
AS select_statement
[ WITH CHECK OPTION ]
[;]
<view_attribute> ::=
{
[ ENCRYPTION ]
[ SCHEMABINDING ]
[ VIEW_METADATA ]
}
Argumentos
schema_name
Es el nombre del esquema al que pertenece la vista.
view_name
Es el nombre de la vista. Los nombres de las vistas deben cumplir las reglas de los
identificadores. La especificacin del nombre del propietario de la vista es opcional.
column
Es el nombre que se va a utilizar para una columna en una vista. Solo se necesita un
nombre de columna cuando una columna proviene de una expresin aritmtica, una
funcin o una constante; cuando dos o ms columnas puedan tener el mismo
nombre, normalmente debido a una combinacin; o cuando una columna de una
vista recibe un nombre distinto al de la columna de la que proviene. Los nombres de
columna se pueden asignar tambin en la instruccin SELECT.
Si no se especifica el parmetro column, las columnas de la vista adquieren los
mismos nombres que las columnas de la instruccin SELECT.
AS
Especifica las acciones que va a llevar a cabo la vista.
select_statement
Es la instruccin SELECT que define la vista. Dicha instruccin puede utilizar ms
de una tabla y otras vistas. Se necesitan permisos adecuados para seleccionar los
objetos a los que se hace referencia en la clusula SELECT de la vista que se ha
creado.
Una vista no tiene por qu ser un simple subconjunto de filas y de columnas de una
tabla determinada. Es posible crear una vista que utilice ms de una tabla u otras
vistas mediante una clusula SELECT de cualquier complejidad.
En una definicin de vista indizada, la instruccin SELECT debe ser una
instruccin de una nica tabla o una instruccin JOIN de varias tablas con
agregacin opcional.
Las clusulas SELECT de una definicin de vista no pueden incluir lo siguiente:
Una clusula ORDER BY, a menos que tambin haya una clusula TOP en
la lista de seleccin de la instruccin SELECT
La palabra clave INTO
La clusula OPTION
Una referencia a una tabla temporal o a una variable de tabla
Dado que select_statement utiliza la instruccin SELECT, es vlido utilizar las
sugerencias <join_hint> y <table_hint> como se especifican en la clusula
FROM. Para obtener ms informacin, vea FROM (Transact-SQL) y SELECT
(Transact-SQL).
En select_statement se pueden utilizar funciones y varias instrucciones SELECT
separadas por UNION o UNION ALL.
CHECK OPTION
Exige que todas las instrucciones de modificacin de datos ejecutadas en la vista
sigan los criterios establecidos en select_statement. Cuando una fila se modifica
mediante una vista, WITH CHECK OPTION garantiza que los datos permanezcan
visibles en toda la vista despus de confirmar la modificacin.
ENCRYPTION
Cifra las entradas de sys.syscomments que contienen el texto de la instruccin
CREATE VIEW. El uso de WITH ENCRYPTION evita que la vista se publique
como parte de la replicacin de SQL Server.
SCHEMABINDING
Enlaza la vista al esquema de las tablas subyacentes. Cuando se especifica
SCHEMABINDING, las tablas base no se pueden modificar de una forma que
afecte a la definicin de la vista. En primer lugar, se debe modificar o quitar la
propia definicin de la vista para quitar las dependencias en la tabla que se va a
modificar. Cuando se utiliza SCHEMABINDING, select_statement debe incluir los
nombres de dos partes (schema.object) de las tablas, vistas o funciones definidas por
el usuario a las que se hace referencia. Todos los objetos a los que se hace
referencia se deben encontrar en la misma base de datos.
Las vistas o las tablas que participan en una vista creada con la clusula
SCHEMABINDING no se pueden quitar a menos que se quite o cambie esa vista de
forma que deje de tener un enlace de esquema. En caso contrario, Motor de base de
datos genera un error. Adems, la ejecucin de las instrucciones ALTER TABLE en
tablas que participan en vistas que tienen enlaces de esquema provoca un error si
estas instrucciones afectan a la definicin de la vista.
VIEW_METADATA
Especifica que la instancia de SQL Server devolver a las API de DB-Library,
ODBC y OLE DB la informacin de metadatos sobre la vista en vez de las tablas
base cuando se soliciten los metadatos del modo de exploracin para una consulta
que hace referencia a la vista. Los metadatos del modo de exploracin son
metadatos adicionales que la instancia de SQL Server devuelve a estas API del lado
cliente. Estos metadatos permiten a las API del lado cliente implementar cursores
del lado cliente actualizables. Los metadatos del modo de exploracin incluyen
informacin sobre la tabla base a la que pertenecen las columnas del conjunto de
resultados.
Para las vistas creadas con VIEW_METADATA, los metadatos del modo de
exploracin devuelven el nombre de vista y no los nombres de tablas base cuando
describen columnas de la vista en el conjunto de resultados.
en
una
base
de
datos
dada,
especifique
el
nombre
recuperados
por
el SELECT declaracin
pueden
ser
simples
nombres
explcitos
de
las
columnas
de
la
vista,
el
FONDOS DOCUMENTALES
SITIOS WEB
http://dev.mysql.com/doc/refman/5.0/en/create-view.html
http://dev.mysql.com/doc/refman/5.5/en/trigger-syntax.html
http://msdn.microsoft.com/es-sv/library/ms189799.aspx
http://msdn.microsoft.com/es-sv/library/ms187956.aspx
BIBLIOGRAFIA