Vous êtes sur la page 1sur 5

Funciones definidas por el usuario

Al igual que las funciones de los lenguajes de programacin, las funciones definidas
por el usuario de SQL Server son rutinas que aceptan parmetros, realizan una accin,
como un clculo complejo, y devuelven el resultado de esa accin como un valor. El
valor devuelto puede ser un valor escalar nico o un conjunto de resultados.

Ventajas de las funciones definidas por el usuario


Las ventajas de utilizar las funciones definidas por el usuario en SQL Server son:
Permiten una programacin modular.
Puede crear la funcin una vez, almacenarla en la base de datos y llamarla desde el
programa tantas veces como desee. Las funciones definidas por el usuario se pueden
modificar, independientemente del cdigo de origen del programa.
Permiten una ejecucin ms rpida.
Al igual que los procedimientos almacenados, las funciones definidas por el usuario
Transact-SQL reducen el costo de compilacin del cdigo Transact-SQL almacenando
los planes en la cach y reutilizndolos para ejecuciones repetidas. Esto significa que no
es necesario volver a analizar y optimizar la funcin definida por el usuario con cada
uso, lo que permite obtener tiempos de ejecucin mucho ms rpidos.
Las funciones CLR ofrecen una ventaja de rendimiento importante sobre las funciones
Transact-SQL para tareas de clculo, manipulacin de cadenas y lgica
empresarial. Transact-SQL se adecuan mejor a la lgica intensiva del acceso a datos.
Pueden reducir el trfico de red.
Una operacin que filtra datos basndose en restricciones complejas que no se puede
expresar en una sola expresin escalar se puede expresar como una funcin. La funcin
se puede invocar en la clusula WHERE para reducir el nmero de filas que se envan al
cliente.

Tipos de funciones
Funcin escalar
Las funciones escalares definidas por el usuario devuelven un nico valor de datos del
tipo definido en la clusula RETURNS. En una funcin escalar insertada no hay cuerpo
de la funcin; el valor escalar es el resultado de una sola instruccin. Para una funcin
escalar de varias instrucciones, el cuerpo de la funcin, definido en un bloque
BEGIN...END, contiene una serie de instrucciones de Transact-SQL que devuelven el
nico valor. El tipo devuelto puede ser de cualquier tipo de datos
excepto text, ntext, image, cursor y timestamp.
Funciones con valores de tabla
Las funciones con valores de tabla definidas por el usuario devuelven un tipo de
datos table. Las funciones insertadas con valores de tabla no tienen cuerpo; la tabla es
el conjunto de resultados de una sola instruccin SELECT.
Funciones del sistema
SQL Server proporciona numerosas funciones del sistema que se pueden usar para
realizar diversas operaciones. No se pueden modificar. Para obtener ms informacin,
vea Funciones integradas (Transact-SQL), Funciones almacenadas del sistema (TransactSQL) y Funciones y vistas de administracin dinmica (Transact-SQL).

Funciones enlazadas a esquemas


CREATE FUNCTION admite una clusula SCHEMABINDING que enlaza la funcin con el
esquema de cualquier objeto al que haga referencia, como tablas, vistas y otras funciones
definidas por el usuario. Se producen errores al intentar modificar o quitar objetos a los que
hace referencia una funcin enlazada con un esquema.
Para poder especificar SCHEMABINDING en CREATE FUNCTION deben cumplirse estas
condiciones:
Todas las vistas y las funciones definidas por el usuario a las que hace referencia la
funcin deben estar enlazadas con un esquema.
Todos los objetos a los que hace referencia la funcin deben encontrarse en la misma
base de datos que la funcin. Se debe hacer referencia a los objetos mediante nombres
de una o dos partes.
Se debe disponer de permisos REFERENCES en todos los objetos (tablas, vistas y
funciones definidas por el usuario) a los que hace referencia la funcin.
Se puede utilizar ALTER FUNCTION para quitar el enlace con el esquema. La instruccin ALTER
FUNCTION debe volver a definir la funcin sin especificar WITH SCHEMABINDING.

CREATE TRIGGER (Transact-SQL)


Crea un disparador DML, DDL o de logon. Un disparador es una clase especial de
procedimiento almacenado que se ejecuta automticamente cuando se produce un
evento en el servidor de bases de datos. Los disparadores DML se ejecutan cuando un
usuario intenta modificar datos mediante un evento de lenguaje de manipulacin de
datos (DML). Los eventos DML son instrucciones INSERT, UPDATE o DELETE de una
tabla o vista. Estos desencadenadores se activan cuando se desencadena cualquier
evento vlido, con independencia de que las filas de la tabla se vean o no
afectadas. Para obtener ms informacin, vea Desencadenadores DML.
Los disparadores DDL se ejecutan como respuesta a diversos eventos del lenguaje de
definicin de datos (DDL). Estos eventos corresponden principalmente a instrucciones
CREATE, ALTER y DROP de Transact-SQL, y a determinados procedimientos
almacenados del sistema que ejecutan operaciones de tipo DDL. Los desencadenadores
logon se activan en respuesta al evento LOGON que se genera cuando se establece la
sesin de un usuario. Los desencadenadores pueden crearse directamente a partir de
instrucciones de Transact-SQL o de mtodos de ensamblados creados en Common
Language Runtime (CLR) de Microsoft .NET Framework y cargados en una instancia de
SQL Server. SQL Server permite crear varios desencadenadores para cualquier
instruccin especfica.

Sintaxis
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 ]

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_nameno 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 oevent_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.
FOR | AFTER
AFTER especfica 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.
INSTEAD OF
Especifica que se ejecuta el desencadenador
desencadenadora, por lo que se suplantan

DML en vez de la instruccin SQL


las acciones de las instrucciones

desencadenadoras. INSTEAD OF no se puede especificar para los desencadenadores DDL o


logon.