Sei sulla pagina 1di 58

Diapositiva 1

Diapositiva 2
Diapositiva 3
Diapositiva 4

Base de datos relacional. En una base de datos relacional, los datos se organizan en
tablas. Una tabla tiene cero o ms filas, cada fila contiene la informacin de un
determinado 'sujeto' de la tabla, por ejemplo en una tabla de alumnos, en una fila
tenemos los datos de un alumno. Las filas en un principio estn desordenadas.

Cada columna representa un 'campo' de la tabla, sirve para almacenar una determinada
informacin, por ejemplo en una tabla de alumnos tendremos una columna para
almacenar el nombre de los alumnos. Todos los valores de una columna determinada
tienen el mismo tipo de dato, y stos estn extrados de un conjunto de valores legales
llamado dominio de la columna. A parte de los valores del dominio, una columna puede
contener el valor nulo (NULL) que indica que no contiene ningn valor. En una tabla
no pueden haber dos columnas con el mismo nombre pero ese nombre s se puede
utilizar en otra tabla.Normalmente todas las tablas deben tener una clave principal
definida. Una clave principal es una columna (o combinacin de columnas) que permite
identificar de forma inequvoca cada fila de la tabla, por lo que no pueden haber en una
tabla dos filas con el mismo valor en la columna definida como clave principal. Una
clave fornea es una columna (o combinacin de columnas) que contiene un valor que
hace referencia a una fila de otra tabla (en algunos casos puede ser la misma tabla).Por
ejemplo, tenemos dos tablas, la de alumnos y la de cursos, en la tabla de alumnos
pondramos una columna curso: para saber en qu curso est matriculado el alumno, la
columna curso en la tabla de alumnos es clave fornea, mientras que la columna codigo
de la tabla de cursos ser clave primaria.Una tabla tiene una nica clave primaria. Una
tabla puede contener cero o ms claves forneas.Cuando se define una columna como
clave principal, ninguna fila de la tabla puede contener un valor nulo en esa columna ni
tampoco se pueden repetir valores en la columna.Cuando se define una columna como
clave fornea, las filas de la tabla pueden contener en esa columna o bien el valor nulo,
o bien un valor que existe en la otra tabla. Eso es lo que se denomina integridad
referencial que consiste en que los datos que referencian otros (clave fornea) deben
1

ser correctos. Las bases de datos de Access2000 tienen la extensin .MDB para que el
ordenador las reconozca como tal.

http://www.aulaclic.es/sql/f_sql.htm

Diapositiva 5

Diapositiva 6

Introduccin
La integridad referencial es un sistema de reglas que utilizan la mayora de las bases
de datos relacionales para asegurarse que los registros de tablas relacionadas son
vlidos y que no se borren o cambien datos relacionados de forma accidental
produciendo errores de integridad.Primero repasemos un poco los tipos de relaciones.
Tipos de relaciones. Entre dos tablas de cualquier base de datos relacional pueden
haber dos tipos de relaciones, relaciones uno a uno y relaciones uno a muchos:
Relacin Uno a Uno: Cuando un registro de una tabla slo puede estar relacionado
con un nico registro de la otra tabla y viceversa.
Por ejemplo: tenemos dos tablas una de profesores y otra de departamentos y queremos
saber qu profesor es jefe de qu departamento, tenemos una relacin uno a uno entre
las dos tablas ya que un departamento tiene un solo jefe y un profesor puede ser jefe de
un solo departamento.
Relacin Uno a Varios: Cuando un registro de una tabla (tabla secundaria) slo
puede estar relacionado con un nico registro de la otra tabla (tabla principal) y un
registro de la tabla principal puede tener ms de un registro relacionado en la
tabla secundaria, en este caso se suele hacer referencia a la tabla principal como tabla
'padre' y a la tabla secundaria como tabla 'hijo', entonces la regla se convierte en 'un
padre puede tener varios hijos pero un hijo solo tiene un padre (regla ms fcil de
recordar).
Por ejemplo: tenemos dos tablas una con los datos de diferentes poblaciones y otra con
los habitantes, una poblacin puede tener ms de un habitante, pero un habitante
pertenecer (estar empadronado) en una nica poblacin. En este caso la tabla
principal ser la de poblaciones y la tabla secundaria ser la de habitantes. Una
poblacin puede tener varios habitantes pero un habitante pertenece a una sola
2

poblacin. Esta relacin se representa incluyendo en la tabla 'hijo' una columna que se
corresponde con la clave principal de la tabla 'padre', esta columna es lo denominamos
clave fornea (o clave ajena o clave externa).
Una clave fornea es pues un campo de una tabla que contiene una referencia a un
registro de otra tabla. Siguiendo nuestro ejemplo en la tabla habitantes tenemos una
columna poblacin que contiene el cdigo de la poblacin en la que est empadronado
el habitante, esta columna es clave ajena de la tabla habitantes, y en la tabla poblaciones
tenemos una columna codigo de poblacion clave principal de la tabla.
Relacin Varios a Varios: Cuando un registro de una tabla puede estar
relacionado con ms de un registro de la otra tabla y viceversa. En este caso las dos
tablas no pueden estar relacionadas directamente, se tiene que aadir una tabla entre las
dos que incluya los pares de valores relacionados entre s.
Por ejemplo: tenemos dos tablas una con los datos de clientes y otra con los artculos
que se venden en la empresa, un cliente podr realizar un pedido con varios artculos, y
un artculo podr ser vendido a ms de un cliente.
No se puede definir entre clientes y artculos, hace falta otra tabla (por ejemplo una
tabla de pedidos) relacionada con clientes y con artculos. La tabla pedidos estar
relacionada con cliente por una relacin uno a muchos y tambin estar relacionada con
artculos por un relacin uno a muchos.
Integridad referencial
Cuando se define una columna como clave fornea, las filas de la tabla pueden contener
en esa columna o bien el valor nulo (ningn valor), o bien un valor que existe en la otra
tabla, un error sera asignar a un habitante una poblacin que no est en la tabla de
poblaciones. Eso es lo que se denomina integridad referencial y consiste en que los
datos que referencian otros (claves forneas) deben ser correctos. La integridad
referencial hace que el sistema gestor de la base de datos se asegure de que no hayan en
las claves forneas valores que no estn en la tabla principal.
La integridad referencial se activa en cuanto creamos una clave fornea y a partir
de ese momento se comprueba cada vez que se modifiquen datos que puedan alterarla.
Cundo se pueden producir errores en los datos?
Cuando insertamos una nueva fila en la tabla secundaria y el valor de la clave
fornea no existe en la tabla principal. insertamos un nuevo habitante y en la columna
poblacion escribimos un cdigo de poblacion que no est en la tabla de poblaciones
(una poblacin que no existe).
3

Cuando modificamos el valor de la clave principal de un registro que tiene 'hijos',


modificamos el codigo de Valencia, sustituimos el valor que tena (1) por un nuevo
valor (10), si Valencia tena habitantes asignados, qu pasa con esos habitantes, no
pueden seguir teniendo el codigo de poblacin 1 porque la poblacin 1 ya no existe, en
este caso hay dos alternativas, no dejar cambiar el codigo de Valencia o bien cambiar el
codigo de poblacin de todos los habitantes de Valencia y asignarles el cdigo 10.
Cuando modificamos el valor de la clave fornea, el nuevo valor debe existir en la
tabla principal. Por ejemplo cambiamos la poblacin de un habitante, tena asignada la
poblacin 1 (porque estaba empadronado en valencia) y ahora se le asigna la poblacin
2 porque cambia de lugar de residencia. La poblacin 2 debe existir en la tabla de
poblaciones.
Cuando queremos borrar una fila de la tabla principal y ese registro tiene 'hijos',
por ejemplo queremos borrar la poblacin 1 (Valencia) si existen habitantes asignados a
la poblacin 1, estos no se pueden quedar con el valor 1 en la columna poblacin porque
tendran asignada una poblacin que no existe. En este caso tenemos dos alternativas,
no dejar borrar la poblacin 1 de la tabla de poblaciones, o bien borrarla y poner a valor
nulo el campo poblacion de todos sus 'hijos'.
Asociada a la integridad referencial estn los conceptos de actualizar los registros en
cascada y eliminar registros en cascada.

Actualizacin y borrado en cascada


El actualizar y/o eliminar registros en cascada, son opciones que se definen cuando
definimos la clave fornea y que le indican al sistema gestor qu hacer en los casos
comentados en el punto anterior
Actualizar registros en cascada:

Esta opcin le indica al sistema gestor de la base de datos que cuando se cambie un
valor del campo clave de la tabla principal, automticamente cambiar el valor de
la clave fornea de los registros relacionados en la tabla secundaria.

Por ejemplo, si cambiamos en la tabla de poblaciones (la tabla principal) el valor 1 por
el valor 10 en el campo codigo (la clave principal), automticamente se actualizan todos
los habitantes (en la tabla secundaria) que tienen el valor 1 en el campo poblacion (en la
clave ajena) dejando 10 en vez de 1.
4

Si no se tiene definida esta opcin, no se puede cambiar los valores de la clave principal
de la tabla principal. En este caso, si intentamos cambiar el valor 1 del codigo de la
tabla de poblaciones , no se produce el cambio y el sistema nos devuelve un error o un
mensaje que los registros no se han podido modificar por infracciones de clave.
Eliminar registros en cascada:

Esta opcin le indica al sistema gestor de la base de datos que cuando se elimina un
registro de la tabla principal automticamente se borran tambin los registros
relacionados en la tabla secundaria.

Por ejemplo: Si borramos la poblacin Onteniente en la tabla de poblaciones,


automticamente todos los habitantes de Onteniente se borrarn de la tabla de
habitantes.
Si no se tiene definida esta opcin, no se pueden borrar registros de la tabla principal si
estos tienen registros relacionados en la tabla secundaria. En este caso, si intentamos
borrar la poblacin Ontenyente, no se produce el borrado y el sistema nos devuelve un
error o un mensaje que los registros no se han podido eliminar por infracciones de clave.

INDICES

Definicin Un ndice en informtica es como el ndice de un libro donde tenemos los


captulos del libro y la pgina donde empieza cada captulo. No vamos a entrar ahora en
cmo se implementan los ndices internamente ya que no entra en los objetivos del
curso pero s daremos unas breves nociones de cmo se definen, para qu sirven y
cundo hay que utilizarlos y cuando no.Un ndice es una estructura de datos que
permite recuperar las filas de una tabla de forma ms rpida adems de
proporcionar una ordenacin distinta a la natural de la tabla. Un ndice se define
sobre una columna o sobre un grupo de columnas, y las filas se ordenarn segn los
valores contenidos en esas columnas. Por ejemplo, si definimos un ndice sobre la
columna poblacion de la tabla de clientes, el ndice permitir recuperar los clientes
ordenados por orden alfabtico de poblacin. Si el ndice se define sobre varias
columnas, los registros se ordenarn por la primera columna, dentro de un mismo
valo
5

r de la primera columna se ordenarn por la segunda columna, y as sucesivamente.


Por ejemplo si definimos un ndice sobre las columnas provincia y poblacion se
ordenarn los clientes por provincia y dentro de la misma provincia por poblacin,
apareceran los de ALICANTE Denia, ALICANTE Xixona, VALENCIA Benetsser,
VALENCIA Oliva.El orden de las columnas dentro de un ndice es importante, si
retomamos el ejemplo anterior y definimos el ndice sobre poblacion y provincia,
apareceran los de VALENCIA Benetusser, ALICANTE Denia, VALENCIA Oliva,
ALICANTE Xixona. Ahora se ordenan por poblacin y los clientes de la misma
poblacin se ordenaran por el campo provincia.
Ventajas e inconvenientes

Ventajas:

Si una tabla tiene definido un ndice sobre una columna se puede localizar mucho ms
rpidamente una fila que tenga un determinado valor en esa columna.
Recuperar las filas de una tabla de forma ordenada por la columna en cuestin
tambin ser mucho ms rpido.

Inconvenientes:
Al ser el ndice una estructura de datos adicional a la tabla, ocupa un poco ms de
espacio en disco.
Cuando se aaden, modifican o se borran filas de la tabla, el sistema debe actualizar los
ndices afectados por esos cambios lo que supone un tiempo de proceso mayor.
Por estas razones no es aconsejable definir ndices de forma indiscriminada.
Los inconvenientes comentados en este punto no son nada comparados con las ventajas
si la columna sobre la cual se define el ndice es una columna que se va a utilizar a
menudo para buscar u ordenar las filas de la tabla. Por eso una regla bastante acertada es
definir ndices sobre columnas que se vayan a utilizar a menudo para recuperar u
ordenar las filas de una tabla.
El Access de hecho crea automticamente ndices sobre las columnas claves principales
y sobre las claves forneas ya que se supone que se utilizan a menudo para recuperar
filas concretas.

Diapositiva 7

Diapositiva 8

Alinstalar esta versin CTP de SQL Server 2005 con Visual Studio 2005 Release
Candidate (RC), debe instalar siempre SQL Server 2005 antes que Visual Studio 2005.
Tambin debe quitar todas las compilaciones anteriores de SQL Server 2005, Visual
Studio 2005 y .NET Framework antes de instalar esta versin CTP. Debido a que ambos
productos dependen de la misma versin de .NET Framework, se deben desinstalar en
el siguiente orden:
SQL Server 2005

Visual Studio 2005

.NET Framework 2.0

SQL Server 2005 CTP se puede instalar simultneamente con versiones anteriores
seleccionadas de SQL Server. Para obtener ms informacin, consulte el tema sobre el
uso de varias versiones de SQL Server en la documentacin de instalacin.

3.4 Desinstalar SQL Server 2005


Para obtener informacin acerca de cmo desinstalar esta versin CTP de SQL Server
2005, consulte el tema sobre cmo desinstalar una instancia existente de SQL Server
2005 (programa de instalacin) en la documentacin de instalacin. Para obtener
informacin acerca de cmo desinstalar una instancia agrupada de SQL Server 2005,
consulte el tema sobre cmo quitar una instancia agrupada de conmutacin por error de
SQL Server 2005 (programa de instalacin) en la documentacin de instalacin. Para
obtener informacin acerca de cmo obtener acceso a la documentacin de instalacin,
vea la seccin 3.1, Acceso a la documentacin de instalacin.
Al desinstalar una versin anterior de SQL Server 2005 con Agregar o quitar
programas, no se guardan las bases de datos del sistema. Si necesita guardar las bases
de datos del sistema de una versin CTP de SQL Server 2005, use el Asistente para
limpieza de la compilacin. Para obtener ms informacin, vea la seccin 5.11 Asistente
para limpieza de la compilacin. Los perfiles de SQL Mail y el correo del Agente SQL
Server tambin se eliminan del registro de Windows. Para utilizar SQL Mail y el correo
del Agente SQL Server, debe volver a crear los perfiles despus de instalar esta versin
CTP.

http://download.microsoft.com/download/0/3/b/03bf2f3b-c3ee-4e33-ba4448fa39b72f92/ReadmeSQL2005.htm#_3460_installing_sql_server_2005_communit_fz
py

Diapositiva 9

SQL Computer Manager es un MMC snap-in que permite a los administradores el


configurar servicios bsicos y configuraciones de protocolo de redes. Este es el
equivalente de SQL Server 2005 a herramientas antiguas como Server Network Utility,
Client Network Utility, y Service Manager. El mismo no est pensado para ajustar
caractersticas de performance u operaciones de SQL Server.
En Computer Manager existir un nodo para Microsoft SQL Servers bajo el cual
existirn todos los servicios, protocolos de redes de servidores, y protocolos de redes de
clientes. El nodo de servicios lista todos los servicios disponibles de Express y brinda
detalles como el nombre de la instancia del servidor, el estatus del servicio, y el tipo de
inicio. Usted puede seleccionar un servicio en particular y realizar operaciones como
iniciar, detener, pausa, o reiniciar el servicio. El nodo Server Network Protocols
enumera el listado de protocolos por cada instancia en la maquina. Haciendo click en el
botn derecho del mouse sobre el protocolo (por ejemplo, TCP) le permitir habilitar o
deshabilitar el protocolo, o cambiar sus propiedades. Existen opciones similares en el
nodo de protocolos de redes de cliente. Por favor tenga en cuenta que el nodo Server
Network Protocols trabaja directamente con la caracterstica del protocolo en la
instancia SQL Server, mientras que el nodo Client Network Protocol trata con las
caractersticas de protocolo de clientes como MDAC o SQL Native Client. El nodo
Client Network Protocol tambien le permite crear un alias que es un nombre alternativo
para SQL Server, y puede contener informacin como nombre del servidor, protocolo
utilizado, string de conexin, e informacin de encriptacin.
SQL Command es una versin OLE DB de la herramienta existente osql. La misma no
solo intenta mantener la compatibilidad funcional con osql, sino que tambien incluye
soporte para los nuevos tipos de datos de SQL Server 2005. Todas las opciones de lnea
de comando brindan la informacin de salida standard, excepto los mensajes de error
que pueden aparecer cuando falla una operacin. El comando SqlCmd-? muestra el
resumen sintctico de los conmutadores sqlcmd.

SQL Computer Manager y SQL Command son el mismo para SQL Server Express
como para las otras ediciones de SQL Server 2005.

Diapositiva 10

Diapositiva 11

SQL Server Management Studio

Ese es el nombre de la herramienta que sustituir al SQL Server Enterprise Manager en


SQL Server 2005.
Viene con varias novedades entre las que podemos destacar:
Manejo por tabs. En la versin actual, con el Query Analizer podemos tener varias
consultas abiertas de forma simultnea, en una aplicacin MDI, pero es un engorro ir
pasando de una a otra. Con SQL Server Management Studio (SSMS) se utilizan
pestaas (tabs) para organizar las consultas abiertas.
Cambio de conexin. Con Query Analizer no se puede cambiar la conexin de una
consulta, slo cambiar de base de datos dentro del mismo servidor. Con SSMS si que
podemos conectar una consulta a cualquier servidor en cualquier momento.
Filtrado de datos. Se pueden filtrar los listados de tablas, de objetos que se estn
manipulando, cosa que agradecern los administradores con bases de datos de cientos
de objetos (tablas, vistas, procedimientos). De esta forma podemos indicar que nos
muestre slo los objetos que contienen la palabra ARTICULO, por ejemplo.

Diapositiva 12

SQL Server Management Studio

Ese es el nombre de la herramienta que sustituir al SQL Server Enterprise Manager en


SQL Server 2005.
Viene con varias novedades entre las que podemos destacar:
Manejo por tabs. En la versin actual, con el Query Analizer podemos tener varias
consultas abiertas de forma simultnea, en una aplicacin MDI, pero es un engorro ir

pasando de una a otra. Con SQL Server Management Studio (SSMS) se utilizan
pestaas (tabs) para organizar las consultas abiertas.
Cambio de conexin. Con Query Analizer no se puede cambiar la conexin de una
consulta, slo cambiar de base de datos dentro del mismo servidor. Con SSMS si que
podemos conectar una consulta a cualquier servidor en cualquier momento.
Filtrado de datos. Se pueden filtrar los listados de tablas, de objetos que se estn
manipulando, cosa que agradecern los administradores con bases de datos de cientos
de objetos (tablas, vistas, procedimientos). De esta forma podemos indicar que nos
muestre slo los objetos que contienen la palabra ARTICULO, por ejemplo.

Diapositiva 13

Diapositiva 14

Diapositiva 15

SQL Server 2005 reemplazo el antiguo SQL Query Analyzer por el Query Editor, es un
componente del Server Management Studio y es una de las herramientas primarias para
testear sentencias T-SQL, queries, scripts, etc.
Con el Query Editor, usted puede escribir scripts en Transact-SQL y Expresiones
Multidimensionales (MDX). Usted puede tambien editar scripts que fueron creados
desde archivos o que automaticamente fueron generados por cuadros de dalogos del
SQL Server Management Studio o bien desde el SQL Object Explorer.
El Query Editor Posee:
AutoComplete de sentencias.
Color Coding
Templates
Representaciones Graficas

Diapositiva 16

Diapositiva 17

Diapositiva 18
10

Diapositiva 19

Soporte ampliado de lenguajes de programacin Con el CLR (common language


runtime) alojado en el motor de la base da datos, los desarrolladores tendrn la opcin
de escoger entre una variedad de lenguajes familiares para desarrollar aplicaciones de
bases de datos, incluyendo Transact-SQL, Microsoft Visual Basic .NET y Microsoft
Visual C# .NET. Adems, el almacenamiento de CLR proporcionar a los
desarrolladores ms flexibilidad mediante el uso de tipos y funciones definidos por el
usuario. El CLR tambin procurar oportunidades de usar el cdigo de terceros para el
desarrollo rpido de aplicaciones de bases de datos.

SQL Server 2005 integrar en su ncleo el CLR (Common Language Runtime) de la


plataforma .NET; es decir, el entorno que permite la ejecucin de aplicaciones .NET,
escritas con cualquier lenguaje capaz de producir MSIL (Microsoft Intermediate
Language). Esta capacidad es anloga a la de otros RDBMS que incorporan en su
producto la mquina virtual Java, obviamente con las diferencias propias de ambas
plataformas.

Que Yukon incorpore el CLR significa que los programadores podrn utilizar el
lenguaje que estn acostumbrados a usar (y no obligatoriamente T-SQL, aunque ste
sigue estando disponible, adems con diversas extensiones y mejoras) a la hora de
escribir un procedimiento almacenado o una funcin asociados a una base de datos. Las
posibilidades son casi infinitas ya que un procedimiento almacenado escrito con C#, por
poner un ejemplo, no tiene a su alcance slo las construcciones de este lenguaje de
programacin, mucho ms potentes que las de T-SQL, sino tambin el acceso a los
servicios de la biblioteca de clases, la seguridad en la ejecucin del cdigo .NET y el
rendimiento mejorado ya que dicho cdigo se compila a cdigo nativo. Usando esta
capacidad sera posible, a modo de ejemplo, escribir un procedimiento almacenado que
ante la solicitud de un cliente extrajese de la base de datos la informacin de un
producto y su imagen, tratando dicha imagen con los servicios de GDI+ en el propio
servidor de datos para entregarla con los atributos apropiados (esto difcilmente podra
hacerse usando solo T-SQL).

Diapositiva 20
11

Estando tan prximo el lanzamiento oficial de las versiones 2005 de Visual Studio
.NET y SQL Server en nuestro pas, este artculo pretende explorar una de las
caractersticas ms innovadoras de la prxima versin de SQL Server: La Creacin de
Procedimientos Almacenados y Funciones en SQL Server utilizando los lenguajes del
.NET Framework Desarrollo y Administracin de Base de Datos Si el trabajo que
realizas combina actividades tanto de administracin de base de datos como de
desarrollo, seguro que estas familiarizado con lo que es el CLR(Common Language
Runtime) del Framework .NET, pero si en tu trabajo solo desempeas tareas de
administracin de base de datos quizs an no lo estas. Seguramente hasta ahora no le
has prestado demasiada atencin porque creas que esto solo era algo concerniente a los
desarrolladores, este concepto est tendiendo a cambiar ya que en las prximas
versiones tanto de SQL Server como de VS.net ser importante y ventajoso comprender
y saber utilizar de manera oportuna y eficiente el CLR indistintamente del papel que
desempees en tu trabajo.

C# y VB.net en SQL Server

Cada vez el Visual Studio integra ms herramientas que permiten la manipulacin y la


ejecucin de distintas tareas contra el servidor de base de datos, de igual manera en el
prximo release de SQL Server, se tendr un entorno mucho ms integrado y familiar
para desarrolladores, para esto solo hay que ver la interfaz que posee, por ejemplo, el
Managment Studio de SQL 2005, es un entorno con muchas ms funcionalidades para
desarrolladores.
En SQL 2000 y en versiones previas podamos crear los distintos objetos de base de
datos tales como procedimientos almacenados, funciones o triggers utilizando T-SQL,
con la versin de SQL que ser liberada este ao, estaremos en capacidad de crear estos
y otros objetos ya no solo utilizando el T-SQL, sino tambin C# y VB.net. El SQL 2005
ha sido creado, en una parte muy significativa, justamente con estos lenguajes.
SQL 2005 expone la funcionalidad del .NET framework permitindonos realizar, entre
otras cosas, lo siguiente:

Crear procedimientos almacenados y triggers utilizando C# o VB.net e invocar estos


procedimientos de la misma manera como se hace para los procedimientos T-SQL.

12

Crear funciones basadas en CLR, ya sea en C# o VB.net e invocarlas de la misma


manera como se hace para las f unciones de T-SQL.
Crear UDTs(Tipos Definidos por Usuario) basados en CLR y utilizarlos para definir
tablas y reglas de negocio.

Procedimientos almacenados extendidos

En SQL 2000 y versiones previas se poda acceder a cdigo externo mediante los
llamados procedimientos almacenados extendidos (extended procedures(xp), basados en
C/C++), algunos de estos invocaban a DLLs precompiladas. Esto es usado cuando se
desea realizar tareas ciertamente complejas, como por ejemplo clculos matemticos
complejos, acceder a funcionalidad expuesta por el sistema operativo o realizar tareas
que demanden un fuerte trabajo de la CPU, es decir tareas en las cuales el T-SQL es
insuficiente e incapaz de poder realizarlas por s solo.
El uso de los procedimientos almacenados extendidos tena ciertas desventajas, el
cdigo que se ejecutaba tena que ser un cdigo en el que el SQL Server confiara
plenamente, y adems el hecho de ser un cdigo no administrado haca que estos se
ejecutaran en el mismo espacio de memoria que el SQL Server, esto traa consigo el
riesgo de ocasionar algn error en el SQL Sever y hacer que este se colgara. Digamos
que los reemplazantes modernos de los xp son precisamente los Procedimientos basados
en CLR.
Algunas situaciones en las que utilizar el CLR sera una buena alternativa a los ya
clsicos procedimientos basados en T-SQL, seran las siguientes:

Reemplazando o ampliando la funcionalidad de extensos y complejos procedimientos


almacenados, especialmente los que realizan clculos matemticos complejos o
frmulas de negocio complejas.
Procedimientos que necesitan acceder a algunas estructuras de datos externas que no
tienen una interface tradicional de acceso a datos. El uso del CLR permite interactuar
directamente con la estructura de datos externa, algo que no podra hacerse con el TSQL. Por ejemplo se podra acceder a un archivo de MS Project para actualizar
complejas programaciones de tareas.
Realizar algoritmos complejos. Por ejemplo algoritmos geogrficos de mapeo.
Realizar complejos clculos de ingeniera.
13

Acceso a Clases del Framework

SQL Server 2005 soportar tres lenguajes: T-SQL, C# y VB.net. Los procedimientos
almacenados que actualmente se usan en SQL 2000 y versiones previas deberan
continuar corriendo y se podr crear nuevos procedimientos, funciones y UDT's (Tipos
Definidos por Usuario) en alguno de los tres lenguajes soportados. A diferencia del TSQL, los lenguajes .NET pueden utilizar las ms de 5000 clases que el Framework .Net
posee, y esto obviamente es una gran diferencia y ventaja.

Procedimientos almacenados extendidos

Es importante resaltar que el uso de estos nuevos lenguajes de lado del Servidor de Base
de Datos, debe ser plenamente justificado, no se trata de que con las nueva versin de
SQL todos empecemos a crear procedimientos o funciones mediante los lenguajes
.NET, y ya no se utilice el T-SQL, esto sera un gran error, por el contrario, los
desarrolladores y administradores de bases de datos deben utilizar primariamente el TSQL, si en caso se presentara alguna situacin en la que el T-SQL quedase limitado,
entonces es en esta situacin que se debera utilizar alguno de los lenguajes .NET.
Si en principio el desarrollador utiliza de manera injustificada los lenguajes .net para
una tarea que pudo haber realizado con T-SQL tradicional, quizs al evaluar y comparar
el performance de uno versus el otro, encontrar que el procedimiento hecho en T-SQL
es ms rpido que el que se realiz con lenguajes .net; probablemente sta sea una
experiencia muy decepcionante y tal vez el desarrollador ya no quiera saber ms a cerca
del uso del CLR. Y esto, lgicamente, no es lo que se pretende; de all que se
recomienda usar los lenguajes .net bajo razones plenamente justificadas.
El ser rigurosos con el uso justificado de los procedimientos basados en CLR, pasa por
el hecho de que si los utilizamos para tareas muy simples, nos tomar ms tiempo la
ejecucin del procedimiento CLR que la del procedimiento T-SQL. El escenario cambia
si es que la tarea a realizar por el procedimiento no es sencilla, en tal caso el tiempo que
nos puede tomar el desarrollo del procedimiento CLR comparativamente con un
procedimiento T-SQL es muchsimo menor.
14

Caso de Aplicacin

Para mostrar de manera prctica la creacin de Procedimientos Almacenados utilizando


los lenguajes .NET hemos creado una pequea aplicacin que utiliza procedimientos
basados en CLR para realizar funciones de encriptacin y desencriptacin. En esta
aplicacin de ejemplo se crearn tres Procedimientos Almacenados utilizando Visual
Basic .Net, estos procedimientos generarn claves de encriptacin, luego se usan estas
claves para encriptar y desencriptar un dato en particular; en este caso, un password de
usuario. T-SQL no podra realizar estas operaciones de encriptacin sin acceder a las
funciones de encriptacin del .NET Framework, entonces en este caso se justifica
plenamente la implementacin de procedimientos almacenados basados en CLR.
A continuacin se muestra un grfico que ilustra la secuencia en la que se han utilizado
las herramientas (Visual Studio .Net y SQL Server) para la creacin y generacin de los
procedimientos almacenados CLR; hasta su uso en la aplicacin Windows .NET.

Diapositiva 21

Estando tan prximo el lanzamiento oficial de las versiones 2005 de Visual Studio
.NET y SQL Server en nuestro pas, este artculo pretende explorar una de las
caractersticas ms innovadoras de la prxima versin de SQL Server: La Creacin de
Procedimientos Almacenados y Funciones en SQL Server utilizando los lenguajes del
.NET Framework Desarrollo y Administracin de Base de Datos Si el trabajo que
realizas combina actividades tanto de administracin de base de datos como de
desarrollo, seguro que estas familiarizado con lo que es el CLR(Common Language
Runtime) del Framework .NET, pero si en tu trabajo solo desempeas tareas de
administracin de base de datos quizs an no lo estas. Seguramente hasta ahora no le
has prestado demasiada atencin porque creas que esto solo era algo concerniente a los
desarrolladores, este concepto est tendiendo a cambiar ya que en las prximas
versiones tanto de SQL Server como de VS.net ser importante y ventajoso comprender
y saber utilizar de manera oportuna y eficiente el CLR indistintamente del papel que
desempees en tu trabajo.

15

C# y VB.net en SQL Server

Cada vez el Visual Studio integra ms herramientas que permiten la manipulacin y la


ejecucin de distintas tareas contra el servidor de base de datos, de igual manera en el
prximo release de SQL Server, se tendr un entorno mucho ms integrado y familiar
para desarrolladores, para esto solo hay que ver la interfaz que posee, por ejemplo, el
Managment Studio de SQL 2005, es un entorno con muchas ms funcionalidades para
desarrolladores.
En SQL 2000 y en versiones previas podamos crear los distintos objetos de base de
datos tales como procedimientos almacenados, funciones o triggers utilizando T-SQL,
con la versin de SQL que ser liberada este ao, estaremos en capacidad de crear estos
y otros objetos ya no solo utilizando el T-SQL, sino tambin C# y VB.net. El SQL 2005
ha sido creado, en una parte muy significativa, justamente con estos lenguajes.
SQL 2005 expone la funcionalidad del .NET framework permitindonos realizar, entre
otras cosas, lo siguiente:

Crear procedimientos almacenados y triggers utilizando C# o VB.net e invocar estos


procedimientos de la misma manera como se hace para los procedimientos T-SQL.
Crear funciones basadas en CLR, ya sea en C# o VB.net e invocarlas de la misma
manera como se hace para las f unciones de T-SQL.
Crear UDTs(Tipos Definidos por Usuario) basados en CLR y utilizarlos para definir
tablas y reglas de negocio.

Procedimientos almacenados extendidos

En SQL 2000 y versiones previas se poda acceder a cdigo externo mediante los
llamados procedimientos almacenados extendidos (extended procedures(xp), basados en
C/C++), algunos de estos invocaban a DLLs precompiladas. Esto es usado cuando se
desea realizar tareas ciertamente complejas, como por ejemplo clculos matemticos
complejos, acceder a funcionalidad expuesta por el sistema operativo o realizar tareas
que demanden un fuerte trabajo de la CPU, es decir tareas en las cuales el T-SQL es
insuficiente e incapaz de poder realizarlas por s solo.
El uso de los procedimientos almacenados extendidos tena ciertas desventajas, el
cdigo que se ejecutaba tena que ser un cdigo en el que el SQL Server confiara
16

plenamente, y adems el hecho de ser un cdigo no administrado haca que estos se


ejecutaran en el mismo espacio de memoria que el SQL Server, esto traa consigo el
riesgo de ocasionar algn error en el SQL Sever y hacer que este se colgara. Digamos
que los reemplazantes modernos de los xp son precisamente los Procedimientos basados
en CLR.
Algunas situaciones en las que utilizar el CLR sera una buena alternativa a los ya
clsicos procedimientos basados en T-SQL, seran las siguientes:

Reemplazando o ampliando la funcionalidad de extensos y complejos procedimientos


almacenados, especialmente los que realizan clculos matemticos complejos o
frmulas de negocio complejas.
Procedimientos que necesitan acceder a algunas estructuras de datos externas que no
tienen una interface tradicional de acceso a datos. El uso del CLR permite interactuar
directamente con la estructura de datos externa, algo que no podra hacerse con el TSQL. Por ejemplo se podra acceder a un archivo de MS Project para actualizar
complejas programaciones de tareas.
Realizar algoritmos complejos. Por ejemplo algoritmos geogrficos de mapeo.
Realizar complejos clculos de ingeniera.

Acceso a Clases del Framework

SQL Server 2005 soportar tres lenguajes: T-SQL, C# y VB.net. Los procedimientos
almacenados que actualmente se usan en SQL 2000 y versiones previas deberan
continuar corriendo y se podr crear nuevos procedimientos, funciones y UDT's (Tipos
Definidos por Usuario) en alguno de los tres lenguajes soportados. A diferencia del TSQL, los lenguajes .NET pueden utilizar las ms de 5000 clases que el Framework .Net
posee, y esto obviamente es una gran diferencia y ventaja.

Procedimientos almacenados extendidos

Es importante resaltar que el uso de estos nuevos lenguajes de lado del Servidor de Base
de Datos, debe ser plenamente justificado, no se trata de que con las nueva versin de
17

SQL todos empecemos a crear procedimientos o funciones mediante los lenguajes


.NET, y ya no se utilice el T-SQL, esto sera un gran error, por el contrario, los
desarrolladores y administradores de bases de datos deben utilizar primariamente el TSQL, si en caso se presentara alguna situacin en la que el T-SQL quedase limitado,
entonces es en esta situacin que se debera utilizar alguno de los lenguajes .NET.
Si en principio el desarrollador utiliza de manera injustificada los lenguajes .net para
una tarea que pudo haber realizado con T-SQL tradicional, quizs al evaluar y comparar
el performance de uno versus el otro, encontrar que el procedimiento hecho en T-SQL
es ms rpido que el que se realiz con lenguajes .net; probablemente sta sea una
experiencia muy decepcionante y tal vez el desarrollador ya no quiera saber ms a cerca
del uso del CLR. Y esto, lgicamente, no es lo que se pretende; de all que se
recomienda usar los lenguajes .net bajo razones plenamente justificadas.
El ser rigurosos con el uso justificado de los procedimientos basados en CLR, pasa por
el hecho de que si los utilizamos para tareas muy simples, nos tomar ms tiempo la
ejecucin del procedimiento CLR que la del procedimiento T-SQL. El escenario cambia
si es que la tarea a realizar por el procedimiento no es sencilla, en tal caso el tiempo que
nos puede tomar el desarrollo del procedimiento CLR comparativamente con un
procedimiento T-SQL es muchsimo menor.

Caso de Aplicacin

Para mostrar de manera prctica la creacin de Procedimientos Almacenados utilizando


los lenguajes .NET hemos creado una pequea aplicacin que utiliza procedimientos
basados en CLR para realizar funciones de encriptacin y desencriptacin. En esta
aplicacin de ejemplo se crearn tres Procedimientos Almacenados utilizando Visual
Basic .Net, estos procedimientos generarn claves de encriptacin, luego se usan estas
claves para encriptar y desencriptar un dato en particular; en este caso, un password de
usuario. T-SQL no podra realizar estas operaciones de encriptacin sin acceder a las
funciones de encriptacin del .NET Framework, entonces en este caso se justifica
plenamente la implementacin de procedimientos almacenados basados en CLR.
A continuacin se muestra un grfico que ilustra la secuencia en la que se han utilizado
las herramientas (Visual Studio .Net y SQL Server) para la creacin y generacin de los
procedimientos almacenados CLR; hasta su uso en la aplicacin Windows .NET.
Diapositiva 22
18

Cuando un cdigo es compilado dentro de un assembly, el cdigo es convertido de alto


nivel a cdigo intermedio (IL)

Cuando el programa es ejecutado, el primer assembly que contiene el punto de entrada,


se carga en memoria
El CLR chequea que el manifiesto del assembly para determinar los requerimientos
para ejecutar la aplicacin

Si el permiso solicitado es otorgado, el CLR crea un proceso para la aplicacin que se


ejecuta
El Just-In-Time (JIT) cimplila conviertiendo la primera porcion de cdigo cargada en
memoria, el JIT compila el resto del cdigo a tiempo y es ubicado en memoria en
cdigo binario

Diapositiva 23

Common Memory Management


El CLR no distingue entre virtual y memoria fisica
SQL Server administra directamente la memoria fsica
En SQL Server, administra la alocacin de memoria por el CLR
El CLR llama al SQL Server primitivo para alocar y de-alocar ste en memoria
La memoria usada por el CLR se considera en el uso total de la memoria del sistema

Thread Management
SQL Server usa hilos de ejecucin por scheduling
CLR usa preferentemente thdread scheduling
Para asegurar la estabilidad, el CLR llama a las APIs del SQL Server para crear threads
Para sincronizar entre los hilos de ejecucin, el CLR llama a objetos del SQL Server
para sincronizar

Integracin con .NET Framework


Con el lanzamiento de Microsoft SQL Server 2005 Beta 2, los programadores de bases
de datos pueden tomar ventaja de la biblioteca de clases de Microsoft .NET Framework
19

y lenguajes modernos de programacin para implementar funcionalidades en el


servidor. Utilizando la integracin con common language runtime (CLR), usted puede
codificar sus procedimientos almacenados, funciones, y disparadores en el lenguaje
.NET Framework de su eleccin. Microsoft Visual Basic .NET y C# ofrecen
construcciones orientadas a los objetos, manejo de excepciones estructurados, vectores,
espacio de nombres, y clases. Adems, .NET Framework brinda miles de clases y
mtodos que contienen extensas capacidades incorporadas que puede utilizar fcilmente
en el servidor. Muchas tareas que fueron extraas o difciles de realizar en TransactSQL pueden lograrse con facilidad al utilizar cdigo managed, adems, existen dos
tipos nuevos de objetos de base de datos agregados y tipos definidos por usuarios.
Ahora, puede utilizar mejor el conocimiento y las habilidades que ya tiene incorporadas
para escribir cdigo en proceso. En resumen, SQL Server 2005 Beta 2 le permite
extender su servidor de base de datos para realizar ms procesos de clculo y
operaciones en el back-end con ms facilidad.
Esta integracin entre SQL Server y CLR brinda varios beneficios importantes:
Mejora en el modelo de programacin: Los lenguajes de programacin que son
compatibles con .NET Framework son, en muchos aspectos, ms ricos que TransactSQL, ofreciendo construcciones y capacidades que antes no estaban disponibles para
desarrolladores SQL.
Mejoras en seguridad: El cdigo managed corre en un ambiente CLR, el cual esta
hosted por el motor de base de datos. Esto permite a los objetos de la base de datos de
.NET Framework estar ms seguros que los procedimientos de almacenamientos
extendidos disponibles anteriormente en versiones previas de SQL Server.
Tipos y agregados definidos por el usuario: Dos nuevos objetos de bases de datos que
expanden el almacenamiento y las capacidades de consulta de SQL Server son
permitidas al hostear el CLR.
Ambiente de desarrollo comn: El desarrollo de base de datos esta integrado con el
ambiente de desarrollo de Visual Studio 2005. Usted puede utilizar las mismas
herramientas para desarrollar y eliminar los errores de objetos de bases de datos y
scripts que utiliza para escribir componentes y servicios .NET Framework capa media o
capa cliente.
Performance y escalabilidad: Debido a que el cdigo managed compila a cdigo nativo
antes de la ejecucin, usted puede mejorar significativamente la performance en algunos
escenarios.
20

Usted puede capitalizar de la integracin CLR para escribir cdigo con lgica ms
compleja y que sea ms apropiado para tareas de clculo, utilizando lenguajes como
Visual Basic .NET y C#. Adems, Visual Basic .NET y C# ofrecen capacidades
orientadas a objetos como encapsulamiento, herencia, y polimorfismo.
uede organizar fcilmente cdigo relacionado a clases y espacio de nombres, lo que
significa que puede organizar y mantener sus inversiones de cdigo con facilidad
cuando esta trabajando con grandes cantidades de cdigo. Esta habilidad para organizar
cdigo de manera lgica y fsica en asambleas y espacio de nombres es un beneficio
enorme, y le permitir encontrar y relacionar diferentes pedazos de cdigo con facilidad
en una implementacin grande de base de datos.
El cdigo managed es ms eficiente que Transact-SQL para procesar nmeros y lgica
de ejecucin complicada, y brinda un soporte extenso a manejo de strings, expresiones
regulares, etc. Tambin, con la funcionalidad disponible en la biblioteca de clases .NET
Framework, usted tendr acceso completo a miles de clases pre-construidas y rutinas a
las cuales podr acceder fcilmente de cualquier procedimiento almacenado,
disparadores, o funciones definidas por el usuario.
unciones mejoradas de manejo de strings, funciones de matemticas, operaciones de
fechas, acceso a recursos del sistema, algoritmos de encriptacin avanzados, acceso a
archivos, procesamiento de imgenes y manipulacin de datos XML, todos son
accesibles con facilidad desde procedimientos de almacenamiento managed, funciones,
disparadores y agregados.
Uno de los beneficios ms importantes de cdigo managed es la seguridad de tipo.
Antes de que el cdigo managed sea ejecutado, el CLR realiza varias verificaciones,
mediante un proceso conocido como verificacin, para asegurarse que el cdigo es
seguro. Por ejemplo, el cdigo es verificado para asegurarse que no se lea memoria a la
cual no se ha escrito.

Mejoras de Seguridad
SQL Server 2005 se beneficia de la iniciativa Trustworthy Computing, una iniciativa de
Microsoft para mejorar la experiencia de los clientes en las reas de seguridad,
privacidad, confiabilidad e integridad de negocios. Como parte de esta iniciativa que fue
presentada en Enero del 2002, hoy en da Microsoft sigue los procesos de desarrollo que
ayudan a asegurar que nuestros productos e instalaciones de productos sean seguras. El
21

equipo de desarrollo de Microsoft SQL Server ha incorporado estos procesos al


desarrollo de SQL Server 2005. Despus del lanzamiento, Microsoft brinda soporte a
los clientes y a los socios de negocios con comunicaciones acerca de problemas de
seguridad. El resultado es que SQL Server 2005 incorporar las caractersticas de
seguridad ms extensivas que ningn otro lanzamiento de SQL Server hasta este
momento.
Generalmente, estas caractersticas y mejoras se agrupan en tres reas:
Restringiendo el acceso de usuarios al servidor SQL: Mayor control de acceso a SQL
Server, e inversiones en mecanismos que permiten al administrador controlar el acceso
a SQL Server mediante polticas.
Deshabilitar servicios y restringir configuraciones de servicios: Brindar a los
administradores la habilidad de restringir el acceso a los recursos dentro de SQL Server,
en el panorama del administrador designado y con un fino grado de granularidad, y para
asegurarse que tengan un sistema fcil de manejar sin violar el principio de menor
privilegios. Debido a que ciertos servicios estn deshabilitados de manera
predeterminada para instalaciones de nuevos servidores, ahora los clientes pueden estar
ms involucrados en decidir que servicios adicionales especficos desean habilitar.
Reduciendo la superficie de ataque para nuevas caractersticas: Comenzando con la
instalacin de SQL Server, la superficie de ataque se minimiza. A lo largo del ciclo de
desarrollo del producto, las nuevas caractersticas fueron revisadas y evaluadas por
seguridad para ayudar a reducir el rea de ataque.

Diapositiva 24

El Codigo Administrado es verificado por el runtime para asegurarse que es del tipo
seguro, y lo valida
El Codigo es cargado desde la tabla metadata de sys.assembly_files en la base de datos
ms bien en el file system
El cdigo precargado es verificado e SQL Server toma la responsabilidad de validar
todas las librerias

Para manejar el out of memory

22

El CLR notificar al SQL Server acerca de la repercusin del la descarga por cada
solicitud de memoria

Bajo la condicion de baja memoria, puede ser dirijido permitiendo a la GC a ejecutarse


ms frecuentemente, esperando por otro procedimiento que lo finalize ntes de invocar
prodecimientos adicionales

Diapositiva 25

Seguridad en Microsoft SQL Server 2005


Publicado: 24 de Mayo de 2004 | Actualizado: 28 de Julio de 2005

En enero de 2002, Microsoft present la iniciativa de la Informtica Fiable (Trustworthy


Computing), pensada para mejorar cuestiones de seguridad, privacidad, confiabilidad e
integridad de negocios. Como parte de esta iniciativa, Microsoft cumple con procesos
de desarrollo que apuntan a que los productos sean seguros en materia de diseo,
configuracin y desarrollo. El equipo de desarrollo de SQL Server ha incorporado estos
procesos en el desarrollo de SQL Server 2005, la nueva versin de SQL Server.
Informtica Fiable y SQL Server 2005
La iniciativa de la Informtica Fiable (en ingls) delimita un marco que define los pasos
necesarios para respaldar la seguridad informtica y, de esta manera, tomar las medidas
que servirn al desarrollo y el mantenimiento de un entorno seguro. Estos pasos ayudan
a proteger la confidencialidad, la integridad y la disponibilidad de datos y sistemas en
cada fase del ciclo de vida del software -el diseo, la entrega, el mantenimiento-. Para
Microsoft, los objetivos de la iniciativa de la Informtica Fiable apuntan a:

Reducir problemas potenciales de seguridad a partir del diseo y testeo de productos.


Reducir el rea de ataques potenciales a partir de la inhabilitacin de funciones que
pueden resultar innecesarias. Tambin asegurar que, durante su instalacin, el producto
elija los valores de configuracin correctos para todas las opciones.
Proporcionar las herramientas y las guas necesarias que fomentan las acciones de
proteccin, deteccin, defensa, recuperacin y mantenimiento.

23

Crear la documentacin necesaria que comunique de forma regular la ltima


informacin sobre seguridad, para que los mismos clientes puedan ocuparse de la
seguridad e integridad de su entorno de SQL Server.
Para ms informacin sobre estos objetivos, visite la pgina sobre Seguridad en el sitio
de Informtica Fiable de Microsoft.
En consonancia con los cuatro preceptos de la iniciativa de la Informtica Fiable,
Microsoft y el equipo de SQL Server adoptaron las siguientes medidas:

Seguridad en el diseo. El equipo de desarrollo de SQL Server realiz numerosas


intervenciones en materia de seguridad y dedic ms de dos meses al estudio de los
componentes de SQL Server. Para cada amenaza potencial de seguridad, el equipo hizo
un anlisis de la situacin y realiz trabajos de diseo y testeo suplementarios que
apuntan a neutralizar problemas potenciales de seguridad. Como resultado de estos
esfuerzos de diseo, SQL Server 2005 incluir nuevas funciones de seguridad.
Seguridad por defecto. Para su instalacin, SQL Server 2005 elegir los valores de
configuracin correctos para todas las opciones, asegurndose as de que la instalacin
de los sistemas se realice en el estado seguro por defecto.
Seguridad en el desarrollo. Microsoft cre contenido para que las organizaciones
puedan desarrollar SQL Server con las credenciales de seguridad apropiadas y para que
comprendan los pasos y permisos requeridos. Las herramientas de desarrollo de SQL
Server proporcionan la informacin necesaria para comprender las decisiones que deben
tomarse durante la etapa de desarrollo. Por otra parte, las actualizaciones de seguridad
son fciles de encontrar y de instalar (de elegir la opcin correspondiente, las
actualizaciones se instalarn automticamente). Las herramientas tambin se encuentran
disponibles para enfrentar los riesgos de seguridad que corren las organizaciones.
Comunicaciones. Para asegurar el soporte del desarrollo de SQL Server, Microsoft
difunde comunicaciones permanentes sobre cuestiones de seguridad. La pgina sobre
Recursos de Seguridad sirve como una archivo central con toda la informacin sobre
seguridad relacionada con SQL Server, incluyendo amenazas de seguridad y parches y
herramientas que sirven para mitigar dichas amenazas.
SQL Server 2005 incorporar mejoras y funciones de seguridad que coinciden con los
objetivos de la iniciativa de la Informtica Fiable. En general, estas funciones y mejoras
recaen en las siguientes reas:

24

Restriccin del acceso de usuarios al servidor. SQL Server 2005 proporciona ms


control de acceso a SQL Server y permite que los administradores controlen dicho
acceso a travs de distintas polticas.
Inhabilitacin de servicios y restriccin de la configuracin del servicio. Los
administradores podrn restringir el acceso a los recursos de SQL Server en funcin del
alcance otorgado al administrador y con una fina variedad de opciones. Los
administradores tambin contarn con un sistema manejable que no viola el principio de
menos privilegios. Al contar con ciertos servicios inhabilitados por defecto para nuevas
instalaciones de servidores, los administradores se involucrarn de un modo ms activo
en la eleccin de los servicios que pretenden habilitar.
Reduccin del rea de ataques potenciales en las nuevas funciones. Empezando por la
configuracin e instalacin de SQL Server, el rea de ataques potenciales se encontrar
minimizada. A travs del ciclo de desarrollo del producto, se ha repasado y evaluado la
seguridad de las nuevas funciones para ayudar a reducir la superficie de ataque.

Diapositiva 26

Diapositiva 27

Diapositiva 28

ALTER Assembly
SQL Server crea un nuego AppDomain para cargar el nuevo cdigo
existente
La session exitente continuar utilizando el viejo cdigo del AppDomain
original
Luego de finalizar la session, las nuevas sessiones se re-enrutarian al nuevo
AppDomain

Permissions
Cualquiera : Sysadmindb_owner, db_ddladmin,CREATE ASSEMBLY

25

EXTERNAL_ACCESS : All the above, CREATE ASSEMBLY WITH


EXTERNAL_ACCESS permission

Diapositiva 29

Diapositiva 30

Ejecutarlo como

CALLER:Especificia que la funcion se ejecutar en el contexto del usuario que lo


llama. (CALLER es el predeterminado)
SELF: Especifica que la funcion se ejecutar en el contexto del usuario que creo la
funcion.
OWNER; Especifica que la funcion se ejecutar en el contexto del propietario de la
funcion
Diapositiva 31

Funciones Escalares
Las funciones que realizan operaciones de manipulacin de
secuencias, benefician al SQLCLR
Las funciones escalares implemetadas en XP para acomodar
prodecimientos complejos, pueden ser reemplazados por sql SQL CLR
Diapositiva 32

Diapositiva 33

Diapositiva 34

Diapositiva 35

26

To monitor memory,the DMVs critical are:


sys.dm_os_memory_allocations
sys.dm_os_memory_caches
sys.dm_os_memory_clerks
sys.dm_os_memory_pools

Sys.dm_os_loaded_modules shows whether CLR is currently loaded for example:

select name, description, * from sys.dm_os_loaded_modules


where description like '%Common Language Runtime%

SQL Server manages the memory for CLR objects

Diapositiva 36

Diapositiva 37

TSQL (de aqu en ms) es un lenguaje que sirve para la definicion, tratamiento y control
de datos, ste modulo proprciona una breve informacin general del tsql como lenguaje
de programacin. Tambien describe los distintos tipos de instrucciones de tsql y los
elementos de su sitnaxis

Diapositiva 38

Diapositiva 39

Una consulta es una peticiono que se hace para obtener datos almacenados en SQL
server. Todas las consultas presentan al usuario el conjunto de resultados de uns
instruccin SELECT. Un conjutno de resultados es una tabla que muestra lod datos
obtenidos mediante la instruccin SQLECT. La tabla tiene filas y columnas.

27

La escritura y ejecucion de instrucciones de TSQL es una de las formas en que se puede


realizar una consulta en SQL Server. Cuando esfriba y ejecute instrucciones de TSQL,
utilizar:

Instrucciones del Lenguaje de definincion de datos (DDL), que se utilizan para crear
objetos en la base de datos.

Instrucciones del Lenguaje de control de datos (DCL), que se utilizan`para deteminar


quen puede ver o modificar los datos

Instrucciones del Lenguaje de tratamientos de datos (DML), que se utilizan para


consultar y modificar datos

Diapositiva 40

Las instrucciones de DDL definen la base de datos mediante la creacion de bases de


datos, tablas y tipo de datos definidos por el usuario. Las intrucciones de DDL se
utilizan tambien para administrar los objtos de la base de datos. Algunas instrucciones
de DDL son :
CREATE nombreobjeto
ALTER nombreobjeto
DROP nombreobjeto

De forma predeterminada, solo los miembors de la funcion sysadmin, dbcreator,


db_owner o db_ddladmin pueden ejecutar instrucciones de DDL,
En General, se recomienda no utilizar otra cuentas para crear objetos de base de datos.
Si distintos usuarios crean sus propios objetos en una base de datos, se requerie que el
propietario de cada objeto conceda los permisos adecuados a cada usuario de esos
objetos. Esto genera trabajo administrativo y debe evitarse.
Restringir los permisos de instrucciones a esas funciones tambien evita los problemas
de propiedad de los objetos que se pueden producir cuando el propietario de un objeto
se ha quietado de ujna base de datos o cuando el propuetario de un procedimiento
almacenado o vista no es propietario de las tablas subadyacentes.

28

La secuencia de comandos siguiente crea una tabla llamada customers en la base de


datos Northwind.incluye las columnas cust_id, company, contact y phone.

USE northwind
CREATE TABLE Customer
(cust_id int, company varchar(40), contact varchar(30), phone char(12))
GO

Diapositiva 41

Las instrucciones de DCL se utilizan para cambiar los permisos asociados con un
usuario o funcion de la base de datos. En la tabla siguiente se descibien algunos:

GRANT:
Crea una entrada en el sistema de seguridad que permite a un susuartio trabajar con
datos o ejecutar ciertas instrucciones de transact sql

DENY:
Crea una entrada en el sistema de seguridad que deniega un permiso de una cuenta de
seguridad e impide que el usuario, grupo o funcion herede el permiso a traves de su
pertenencia a grupos o funciones.

REVOKE:
Quita un permiso concedido o denegado previamente.

De forma predeterminada, slo los miembros del a funcion sysadmin, dbcreator,


db_owner o db_securityadmin puede ejecutar instrucciones DCL.

Diapositiva 42

Las instrucciones de DML funcionan con los datos de la base de datos.


Mediante estas instrucciones puede cambiarlos o recuperar informacin
Las instrucciones DML incluyen:

29

SELECT
INSERT
UPDATE
DELETE

Ejemplo:
En ste caso se recuperar el identificador de categoria, nombre de producto,
identificador de producto y precio por unidad de los productos de la base de datos
Northwind

Diapositiva 43

SQL Server procesa en lotes una o varias instrucciones de TSQL. Una directiva de
proceso por lotes indica a SQL Server que debe analizar y ejecutar todas las
instrucciones que componen el lote. Hasy dos mtodos bsicos de iniciar procesos por
lotes en SQL Sever.

GO
Las utilidades de SQL Sever interpretan el comando GO como una seal para iniciar el
envo del lote actual de instrucciones de TSQL a SQL Server.
Un comando GO delimita lotes de instrucciones de TSQL para las herramientas y
utiulidades, y marca el final del lote. No se trata, realmente, de uns instruccin de
TSQL.
Al usar el comando GO debe tener en cuenta estas cuestiones:
El lote actual de instrucciones incluye todas las que se han escrito desde el comando GO
anterior o desde el inicio de la sesion ( o secuencia de comandos, si se trata del primer
comando GO).
Una instruccin de TSQL no puede ocupar la misma linea que el comando GO, auqneu
esa linea si puede contener comentarios.
Los usuarios deben seguir las nomras aplicables a los lotes.
Por ejemplo, algunas instrucciones de lenguamne de definicion de datos (DDL), deben
ejecutarse de forma independiente de otras instrucciones de TSQL, por lo que se
separan unas de otras por medio de un comando GO

30

El mbito de las variables locales (definidas por el usuario) se limita a un lote, con lo
que no se puede hacer referencia a ellas despues de un comando GO

EXEC
La directiva EXEC se usa para ejcecutar una funcion definida por el usuario, un
prodecimiento de sistema, un procedimiento almacenado definido por el usuario o un
procedimiento almacenado extendido. Tambien puede controlar la ejecucion de una
cadena de caracteres dentro de un lote de TSQL.
Se pueden pasar parmetros en forma de argumentos y tambien se puede asignar un
estado de retorno

Diapositiva 44

Los comentarios son cadenas de texto que no se ejecutarn, colocadas en las


instrucciones para describir la accion que la instruccin est realizando o para
deshabilitar una o varias lineas de la instruccin. Se pueden utilizar de una de estas dos
formas: en una linea de una instruccin o como bloque.

Comentarios en linea.
Se pueden crear comentarios en una linea mediante dos guiones (--) para establecer un
comentario aparte de una instruccin. TSQL pasa por alto el texto situado a la derecia
de los caracteres de comentario. ste carcter de comentario se puede utilizar tambien
para deshabilitar lineas de una instruccin.

Comentarios en Bloque
Para crear bloques de varias lineas de comentarios, coloque un carcter de comentario
(/*) al comienzo del texto del comentario, escriba suys anotaciones y , despues,
concluya el comentario con un carcter de cierre de comentario (*/).

Utilice este indicarod de carcter para cerar una o varias lineas de comentarios

Diapositiva 45

int, bigint, smallint, and tinyint


31

Exact number data types that use integer data.


bigint
Integer (whole number) data from -2^63 (-9223372036854775808) through 2^63-1
(9223372036854775807). Storage size is 8 bytes.
int
Integer (whole number) data from -2^31 (-2,147,483,648) through 2^31 - 1
(2,147,483,647). Storage size is 4 bytes. The SQL-92 synonym for int is integer.
smallint
Integer data from -2^15 (-32,768) through 2^15 - 1 (32,767). Storage size is 2 bytes.
tinyint
Integer data from 0 through 255. Storage size is 1 byte.
Remarks
The bigint data type is supported where integer values are supported. However, bigint
is intended for special cases where the integer values may exceed the range supported
by the int data type. The int data type remains the primary integer data type in SQL
Server.
bigint fits between smallmoney and int in the data type precedence chart.
Functions will return bigint only if the parameter expression is a bigint data type. SQL
Server will not automatically promote other integer data types (tinyint, smallint, and
int) to bigint.

Diapositiva 46

decimal and numeric


Numeric data types with fixed precision and scale.
decimal[(p[, s])] and numeric[(p[, s])]
Fixed precision and scale numbers. When maximum precision is used, valid values are
from - 10^38 +1 through 10^38 - 1. The SQL-92 synonyms for decimal are dec and
dec(p, s).
p (precision)
Specifies the maximum total number of decimal digits that can be stored, both to the left
and to the right of the decimal point. The precision must be a value from 1 through the
maximum precision. The maximum precision is 38.
s (scale)
32

Specifies the maximum number of decimal digits that can be stored to the right of the
decimal point. Scale must be a value from 0 through p. The default scale is 0; therefore,
0 <= s <= p. Maximum storage sizes vary, based on the precision.

money and smallmoney


Monetary data types for representing monetary or currency values.
money
Monetary data values from -2^63 (-922,337,203,685,477.5808) through
2^63 - 1 (+922,337,203,685,477.5807), with accuracy to a ten-thousandth of a monetary
unit. Storage size is 8 bytes.
smallmoney
Monetary data values from - 214,748.3648 through +214,748.3647, with accuracy to a
ten-thousandth of a monetary unit. Storage size is 4 bytes.

Diapositiva 47

float and real


Approximate number data types for use with floating point numeric data. Floating point
data is approximate; not all values in the data type range can be precisely represented.
Syntax
float [ ( n ) ]
Is a floating point number data from - 1.79E + 308 through 1.79E + 308. n is the
number of bits used to store the mantissa of the float number in scientific notation and
thus dictates the precision and storage size. n must be a value from 1 through 53.

datetime and smalldatetime


Date and time data types for representing date and time of day.
datetime
Date and time data from January 1, 1753 through December 31, 9999, to an accuracy of
one three-hundredth of a second (equivalent to 3.33 milliseconds or 0.00333 seconds).
Values are rounded to increments of .000, .003, or .007 seconds, as shown in the table.

Smalldatetime

33

Date and time data from January 1, 1900, through June 6, 2079, with accuracy to the
minute. smalldatetime values with 29.998 seconds or lower are rounded down to the
nearest minute; values with 29.999 seconds or higher are rounded up to the nearest
minute.

Diapositiva 48

char and varchar


Fixed-length (char) or variable-length (varchar) character data types.
char[(n)]
Fixed-length non-Unicode character data with length of n bytes. n must be a value from
1 through 8,000. Storage size is n bytes. The SQL-92 synonym for char is character.
varchar[(n)]
Variable-length non-Unicode character data with length of n bytes. n must be a value
from 1 through 8,000. Storage size is the actual length in bytes of the data entered, not n
bytes. The data entered can be 0 characters in length. The SQL-92 synonyms for
varchar are char varying or character varying.

ntext, text, and image


Fixed and variable-length data types for storing large non-Unicode and Unicode
character and binary data. Unicode data uses the UNICODE UCS-2 character set.
ntext
Variable-length Unicode data with a maximum length of 230 - 1 (1,073,741,823)
characters. Storage size, in bytes, is two times the number of characters entered. The
SQL-92 synonym for ntext is national text.
text
Variable-length non-Unicode data in the code page of the server and with a maximum
length of 231-1 (2,147,483,647) characters. When the server code page uses doublebyte characters, the storage is still 2,147,483,647 bytes. Depending on the character
string, the storage size may be less than 2,147,483,647 bytes.

nchar and nvarchar


Character data types that are either fixed-length (nchar) or variable-length (nvarchar)
Unicode data and use the UNICODE UCS-2 character set.
34

nchar(n)
Fixed-length Unicode character data of n characters. n must be a value from 1 through
4,000. Storage size is two times n bytes. The SQL-92 synonyms for nchar are national
char and national character.
nvarchar(n)
Variable-length Unicode character data of n characters. n must be a value from 1
through 4,000. Storage size, in bytes, is two times the number of characters entered. The
data entered can be 0 characters in length. The SQL-92 synonyms for nvarchar are
national char varying and national character varying.
Remarks
When n is not specified in a data definition or variable declaration statement, the default
length is 1. When n is not specified with the CAST function, the default length is 30.
Use nchar when the data entries in a column are expected to be consistently close to the
same size.
Use nvarchar when the data entries in a column are expected to vary considerably in
size.
Objects using nchar or nvarchar are assigned the default collation of the database,
unless a specific collation is assigned using the COLLATE clause.
SET ANSI_PADDING OFF does not apply to nchar or nvarchar. SET
ANSI_PADDING is always ON for nchar and nvarchar.

Diapositiva 49

binary and varbinary


Binary data types of either fixed-length (binary) or variable-length (varbinary).
binary [ ( n ) ]
Fixed-length binary data of n bytes. n must be a value from 1 through 8,000.
Storage size is n+4 bytes.
varbinary [ ( n ) ]
Variable-length binary data of n bytes. n must be a value from 1 through 8,000.
Storage size is the actual length of the data entered + 4 bytes, not n bytes. The data
entered can be 0 bytes in length. The SQL-92 synonym for varbinary is binary
varying.

35

image
Variable-length binary data from 0 through 231-1 (2,147,483,647) bytes.

Diapositiva 50

Arithmetic Operators
Arithmetic operators perform mathematical operations on two expressions of any of the
data types of the numeric data type category. For more information about data type
categories, see Transact-SQL Syntax Conventions.
Assignment Operator
Transact-SQL has one assignment operator, the equals sign (=). In this example, the
@MyCounter variable is created. Then, the assignment operator sets @MyCounter to
a value returned by an expression.
DECLARE @MyCounter INT SET @MyCounter = 1 The assignment operator can also
be used to establish the relationship between a column heading and the expression
defining the values for the column. This example displays two column headings named
FirstColumnHeading and SecondColumnHeading. The string xyz is displayed in the
FirstColumnHeading column heading for all rows. Then, each product ID from the
Products table is listed in the SecondColumnHeading column heading.
USE Northwind GO SELECT FirstColumnHeading = 'xyz', SecondColumnHeading =
ProductID FROM Products GO
Bitwise Operators
Bitwise operators perform bit manipulations between two expressions of any of the data
types of the integer data type category.
Comparison Operators
Comparison operators test whether or not two expressions are the same. Comparison
operators can be used on all expressions except expressions of the text, ntext, or image
data types.
The result of a comparison operator has the Boolean data type, which has three values:
TRUE, FALSE, and UNKNOWN. Expressions that return a Boolean data type are
known as Boolean expressions.
Unlike other SQL Server data types, a Boolean data type cannot be specified as the data
type of a table column or variable, and cannot be returned in a result set.

36

When SET ANSI_NULLS is ON, an operator that has one or two NULL expressions
returns UNKNOWN. When SET ANSI_NULLS is OFF, the same rules apply, except
an equals operator returns TRUE if both expressions are NULL. For example, NULL =
NULL returns TRUE if SET ANSI_NULLS is OFF.
Expressions with Boolean data types are used in the WHERE clause to filter the rows
that qualify for the search conditions and in control-of-flow language statements such as
IF and WHILE, for example:
USE Northwind GO DECLARE @MyProduct int SET @MyProduct = 10 IF
(@MyProduct <> 0) SELECT * FROM Products WHERE ProductID = @MyProduct
GO

Logical Operators
Logical operators test for the truth of some condition. Logical operators, like
comparison operators, return a Boolean data type with a value of TRUE or FALSE.
String Concatenation Operator
The string concatenation operator allows string concatenation with the addition sign (+),
which is also known as the string concatenation operator. All other string manipulation
is handled through string functions such as SUBSTRING.
By default, an empty string is interpreted as an empty string in INSERT or assignment
statements on data of the varchar data type. In concatenating data of the varchar, char,
or text data types, the empty string is interpreted as an empty string. For example, 'abc'
+ '' + 'def' is stored as 'abcdef'. However, if the sp_dbcmptlevel compatibility level
setting is 65, empty constants are treated as a single blank character and 'abc' + '' + 'def'
is stored as 'abc def'. For more information about the interpretation of empty strings, see
sp_dbcmptlevel.
When two character strings are concatenated, the collation of the result expression is set
following the rules of collation precedence. For more information, see Collation
Precedence.
Unary Operators
Unary operators perform an operation on only one expression of any of the data types of
the numeric data type category.
The + (Positive) and - (Negative) operators can be used on any expression of any of the
data types of the numeric data type category. The ~ (Bitwise NOT) operator can be used
only on expressions of any of the data types of the integer data type category.
37

Diapositiva 51

Operadores aritmticos
Los operadores aritmticos realizan operaciones matemticas con dos expresiones de
cualquiera de los tipos de datos de la categora del tipo de datos numrico. Para obtener
ms informacin acerca de las categoras de los tipos de datos, consulte Convenciones
de sintaxis de Transact-SQL.
OperadorSignificado+ (suma)Suma.- (resta)Resta.* (multiplicacin)Multiplicacin./
(divisin)Divisin.% (mdulo)Devuelve el resto entero de una divisin. Por ejemplo, 12
% 5 = 2 porque el resto de 12 dividido entre 5 es 2.
Tambin se pueden utilizar los operadores de suma (+) y resta (-) para realizar
operaciones aritmticas sobre valores datetime y smalldatetime.
Para obtener ms informacin acerca de la precisin y la escala de los resultados en las
operaciones aritmticas, consulte Precisin, escala y longitud.

Diapositiva 52

Operador de asignacin
Transact-SQL tiene un operador de asignacin, el signo igual (=). En este ejemplo, se
crea la variable @MyCounter. Entonces, el operador de asignacin establece
@MyCounter al valor devuelto por una expresin.
DECLARE @MyCounter INT SET @MyCounter = 1 El operador de asignacin
tambin se puede utilizar para establecer la relacin entre un encabezado de columna y
la expresin que define los valores para esa columna. Este ejemplo muestra dos
encabezados de columnas llamados FirstColumnHeading y SecondColumnHeading.
La cadena xyz se muestra en el encabezado de columna FirstColumnHeading para
todas las filas. Cada Id. de producto de la tabla Products se enumera en el encabezado
de columna SecondColumnHeading.
USE Northwind GO SELECT FirstColumnHeading = 'xyz', SecondColumnHeading =
ProductID FROM Products GO

Diapositiva 53

38

Operadores bit a bit


Los operadores bit a bit realizan tratamientos de bits entre dos expresiones de cualquiera
de los tipos de datos de la categora del tipo de datos enteros.

Los operandos para los operadores bit a bit pueden ser de cualquiera de los tipos de
datos de las categoras entero o cadena binaria (excepto el tipo de datos image), con la
excepcin de que ambos operandos no pueden ser de cualquiera de los tipos de datos de
la categora cadena binaria. La siguiente tabla muestra los tipos de datos de operando
admitidos.

Diapositiva 54

Operadores de comparacin
Los operadores de comparacin comprueban si dos expresiones son iguales o no. Se
pueden utilizar en todas las expresiones excepto en las de los tipos de datos text, ntext o
image.
= (igual a)
Compara dos expresiones (es un operador de comparacin). Cuando se comparan
expresiones no nulas, el resultado es TRUE (verdadero) si ambos operandos son
iguales; en otro caso, el resultado es FALSE (falso). Si alguno o ambos operandos es
NULL y SET ANSI_NULLS est establecido en ON (activado), el resultado es NULL.
Si SET ANSI_NULLS est establecido en OFF (desactivado), el resultado es FALSE si
uno de los operandos es NULL y TRUE si los dos operandos son NULL.
> (Mayor que)
Compara dos expresiones (es un operador de comparacin). Cuando se comparan
expresiones no nulas, el resultado es TRUE (verdadero) si el operando de la izquierda
tiene un valor mayor que el de la derecha; en otro caso, el resultado es FALSE (falso).
Si alguno o ambos operandos es NULL y SET ANSI_NULLS est establecido en ON
(activado), el resultado es NULL. Si SET ANSI_NULLS est establecido en OFF
(desactivado), el resultado es FALSE si uno de los operandos es NULL y TRUE si los
dos operandos son NULL.
< (Menor que)
Compara dos expresiones (es un operador de comparacin). Cuando se comparan
expresiones no nulas, el resultado es TRUE (verdadero) si el operando de la izquierda
39

tiene un valor menor que el de la derecha; de otra forma, el resultado es FALSE (falso).
Si alguno o ambos operandos es NULL y SET ANSI_NULLS est establecido en ON
(activado), el resultado es NULL. Si SET ANSI_NULLS est establecido en OFF
(desactivado), el resultado es FALSE si uno de los operandos es NULL y TRUE si los
dos operandos son NULL.
>= (mayor que o igual a)
Compara dos expresiones (es un operador de comparacin). Cuando se comparan
expresiones no nulas, el resultado es TRUE (verdadero) si el operando de la izquierda
tiene un valor mayor que o igual al del operando de la derecha; de otra forma, el
resultado es FALSE (falso). Si alguno o ambos operandos es NULL y SET
ANSI_NULLS est establecido en ON (activado), el resultado es NULL. Si SET
ANSI_NULLS est establecido en OFF (desactivado), el resultado es FALSE si uno de
los operandos es NULL y TRUE si los dos operandos son NULL.
<= (menor que o igual a)
Compara dos expresiones (es un operador de comparacin). Cuando se comparan dos
expresiones no nulas, el resultado es TRUE (verdadero) si el operando de la izquierda
tiene un valor menor que o igual al operando de la derecha; de otra forma, el resultado
es FALSE (falso). Si alguno o ambos operandos es NULL y SET ANSI_NULLS est
establecido en ON (activado), el resultado es NULL. Si SET ANSI_NULLS est
establecido en OFF (desactivado), el resultado es FALSE si uno de los operandos es
NULL y TRUE si los dos operandos son NULL.
<> (distinto de)
Compara dos expresiones (es un operador de comparacin). Cuando se comparan
expresiones no nulas, el resultado es TRUE (verdadero) si el operando de la izquierda es
distinto del operando de la derecha; de otra forma, el resultado es FALSE (falso). Si
alguno o ambos operandos es NULL y SET ANSI_NULLS est establecido en ON
(activado), el resultado es NULL. Si SET ANSI_NULLS est establecido en OFF
(desactivado), el resultado es FALSE si uno de los operandos es NULL y TRUE si los
dos operandos son NULL.
!= (distinto de)
Prueba si una expresin es distinta de otra expresin (es un operador de comparacin).
Funciona de la misma forma que el operador de comparacin <> (distinto de).
!< (no menor que)

40

Compara dos expresiones (es un operador de comparacin). Cuando se comparan


expresiones no nulas, el resultado es TRUE (verdadero) si el operando de la izquierda
no tiene un valor menor que el operando de la derecha; de otra forma, el resultado es
FALSE (falso). Si alguno o ambos operandos es NULL y SET ANSI_NULLS est
establecido en ON (activado), el resultado es NULL. Si SET ANSI_NULLS est
establecido en OFF (desactivado), el resultado es FALSE si uno de los operandos es
NULL y TRUE si los dos operandos son NULL.
!> !> (no mayor que)
Compara dos expresiones (es un operador de comparacin). Cuando se comparan
expresiones no nulas, el resultado es TRUE (verdadero) si el operando de la izquierda
no tiene un valor mayor que el operando de la derecha; de otra forma, el resultado es
FALSE (falso). Si alguno o ambos operandos es NULL y SET ANSI_NULLS est
establecido en ON (activado), el resultado es NULL. Si SET ANSI_NULLS est
establecido en OFF (desactivado), el resultado es FALSE si uno de los operandos es
NULL y TRUE si los dos operandos son NULL.

El resultado del operador de comparacin es de tipo de datos Boolean, que tiene tres
valores: TRUE, FALSE y UNKNOWN. Las expresiones que devuelven tipos de datos
Boolean se conocen como expresiones booleanas.
A diferencia de los otros tipos de datos de SQL Server, el tipo de datos Boolean no se
puede especificar como tipo de datos de la variable o columna de una tabla, y no se
puede devolver en un conjunto de resultados.
Cuando SET ANSI_NULLS es ON, un operador con una o dos expresiones NULL
devuelve UNKNOWN. Cuando SET ANSI_NULLS es OFF, se cumple la misma regla,
excepto que el operador de igualdad devuelve TRUE si ambas expresiones son NULL.
Por ejemplo, NULL = NULL devuelve TRUE si SET ANSI_NULLS es OFF.
Las expresiones con tipos de datos Boolean se utilizan en la clusula WHERE para
filtrar las filas que cumplen las condiciones de bsqueda y en las instrucciones de
lenguajes de control de flujo tales como IF y WHILE, por ejemplo:
USE Northwind GO DECLARE @MyProduct int SET @MyProduct = 10 IF
(@MyProduct <> 0) SELECT * FROM Products WHERE ProductID = @MyProduct
GO
Diapositiva 55
41

ALL
Compara un valor escalar con un conjunto de valores de una sola columna.
AND
Combina dos expresiones booleanas y devuelve TRUE cuando ambas expresiones son
TRUE (verdaderas). Cuando en una instruccin se utiliza ms de un operador lgico,
primero se evalan los operadores AND. Puede cambiar el orden de la evaluacin si
utiliza parntesis.
ANY
Compara un valor escalar con un conjunto de valores de una sola columna. Para obtener
ms informacin, consulte SOME | ANY.
BETWEEN
Especifica el intervalo que se va a probar.
EXISTS
Especifica una subconsulta para probar la existencia de filas.
IN
Determina si un valor dado coincide con algn valor de una subconsulta o lista.
LIKE
Determina si una cadena de caracteres dada coincide o no con un determinado modelo.
Un modelo puede incluir caracteres normales y caracteres comodn. Durante la
coincidencia de patrones, los caracteres regulares deben coincidir exactamente con los
caracteres especificados en la cadena de caracteres. Sin embargo, los caracteres
comodn pueden coincidir con fragmentos arbitrarios de la cadena de caracteres. Con
los caracteres comodn el operador LIKE es ms flexible que los operadores de
comparacin de cadenas = y !=. Si alguno de los argumentos no es del tipo de datos de
cadena de caracteres, Microsoft SQL Server lo convierte al tipo de datos de cadena
de caracteres, si es posible.
NOT
Niega una entrada booleana.
OR
Combina dos condiciones. Cuando en una instruccin se utiliza ms de un operador
lgico, los operadores OR se evalan despus de los operadores AND. Sin embargo, se
puede cambiar el orden de evaluacin utilizando parntesis.
SOME | ANY
Compara un valor escalar con un conjunto de valores de una sola columna.
42

Diapositiva 56

Operador de concatenacin de cadenas


El operador de concatenacin de cadenas permite concatenar cadenas con el signo de
suma (+), tambin conocido como operador de concatenacin de cadenas. Cualquier
otro tratamiento de cadenas se controla a travs de funciones de cadenas como
SUBSTRING.
De manera predeterminada, una cadena vaca se interpreta como tal cadena vaca en
INSERT o en instrucciones de asignacin con datos de tipo varchar. En la
concatenacin de datos de tipo varchar, char o text la cadena vaca se interpreta como
tal cadena vaca. Por ejemplo, 'abc' + '' + 'def' se almacena como 'abcdef'. Sin embargo,
si el nivel de compatibilidad sp_dbcmptlevel es 65, las constantes vacas se tratan
como caracteres en blanco y 'abc' + '' + 'def' se almacena como 'abc def'. Para obtener
ms informacin acerca de la interpretacin de cadenas vacas, consulte
sp_dbcmptlevel.
Cuando se concatenan dos cadenas de caracteres, la intercalacin de la expresin del
resultado se configura segn las reglas de la precedencia de intercalacin. Para obtener
ms informacin, consulte Precedencia de intercalacin.

Diapositiva 57

Los operadores + (positivo) y - (negativo) se pueden utilizar en cualquier expresin de


cualquiera de los tipos de datos de la categora del tipo de datos numrico. El operador
~ (operador bit a bit NOT) slo se puede utilizar en expresiones de cualquiera de los
tipos de datos de la categora del tipo de datos entero.

Diapositiva 58

Observaciones
SQL Server puede tener hasta dos mil millones de tablas por cada base de datos y 1.024
columnas por tabla. El nmero de filas y el tamao total de la tabla est limitado
solamente por el espacio de almacenamiento disponible. El nmero mximo de bytes
por fila es de 8.060. Si se crean tablas con columnas varchar, nvarchar o varbinary
en las que el ancho total definido excede de 8.060 bytes, se crea la tabla, pero aparece
43

un mensaje de advertencia. Al intentar insertar ms de 8.060 bytes en tal fila o


actualizar una fila de tal forma que su tamao total de fila exceda de 8.060, se genera un
mensaje de error y no se puede realizar la instruccin.
Las instrucciones CREATE TABLE que incluyen una columna sql_variant pueden
generar la siguiente advertencia:
The total row size (xx) for table 'yy' exceeds the maximum number of bytes per row
(8060). Rows that exceed the maximum number of bytes will not be added. Esta
advertencia se produce porque sql_variant puede tener una longitud mxima de 8016
bytes. Cuando una columna sql_variant contiene valores cercanos a la longitud
mxima, puede superar el lmite del tamao mximo de la fila.
Cada tabla puede contener un mximo de 249 ndices no agrupados y 1 ndice agrupado.
stos incluyen los ndices generados para admitir las restricciones PRIMARY KEY y
UNIQUE definidas para la tabla.
SQL Server no impone un orden en que DEFAULT, IDENTITY, ROWGUIDCOL o las
restricciones de columna se especifican en una definicin de columna.

Diapositiva 59

INSERT
Agrega una nueva fila a una tabla o vista.

Observaciones
INSERT anexa nuevas filas a una tabla. Para reemplazar datos en una tabla, se debe
utilizar las instrucciones DELETE o TRUNCATE TABLE para borrar los datos
existentes antes de cargar nuevos datos con INSERT. Para modificar los valores de
columnas en las filas existentes, utilice UPDATE. Para crear una nueva tabla y cargarla
de datos en un paso, utilice la opcin INTO de la instruccin SELECT.
Es posible tener acceso a una variable table, en su mbito, como si fuera una tabla
normal. Por tanto, se puede utilizar una variable table como la tabla a la que se van a
agregar filas en una instruccin INSERT. Para obtener ms informacin, consulte table.
Un nombre de cuatro partes generado con la funcin OPENDATASOURCE como la
parte de nombre de servidor, tambin se puede utilizar como una tabla de origen en
todos los lugares donde pueda aparecer un nombre de tabla en instrucciones INSERT.

44

Las columnas creadas con el tipo de datos uniqueidentifier almacenan valores binarios
de 16 bytes con formato especial. A diferencia de lo que sucede con las columnas de
identidad, SQL Server no genera automticamente valores de columnas con el tipo de
datos uniqueidentifier. Durante una operacin de insercin, se puede utilizar variables
con un tipo de datos uniqueidentifier y constantes de cadena con la forma xxxxxxxxxxxx-xxxx-xxxx-xxxxxxxxxxxx (36 caracteres incluidos los guiones, donde x es un
dgito hexadecimal, en el intervalo 0-9, o a-f) para columnas uniqueidentifier. Por
ejemplo, 6F9619FF-8B86-D011-B42D-00C04FC964FF es un valor vlido para una
variable o columna uniqueidentifier. Utilice la funcin NEWID() para obtener un
identificador exclusivo global (GUID).

Diapositiva 60

INSERT
Agrega una nueva fila a una tabla o vista.

Observaciones
INSERT anexa nuevas filas a una tabla. Para reemplazar datos en una tabla, se debe
utilizar las instrucciones DELETE o TRUNCATE TABLE para borrar los datos
existentes antes de cargar nuevos datos con INSERT. Para modificar los valores de
columnas en las filas existentes, utilice UPDATE. Para crear una nueva tabla y cargarla
de datos en un paso, utilice la opcin INTO de la instruccin SELECT.
Es posible tener acceso a una variable table, en su mbito, como si fuera una tabla
normal. Por tanto, se puede utilizar una variable table como la tabla a la que se van a
agregar filas en una instruccin INSERT. Para obtener ms informacin, consulte table.
Un nombre de cuatro partes generado con la funcin OPENDATASOURCE como la
parte de nombre de servidor, tambin se puede utilizar como una tabla de origen en
todos los lugares donde pueda aparecer un nombre de tabla en instrucciones INSERT.
Las columnas creadas con el tipo de datos uniqueidentifier almacenan valores binarios
de 16 bytes con formato especial. A diferencia de lo que sucede con las columnas de
identidad, SQL Server no genera automticamente valores de columnas con el tipo de
datos uniqueidentifier. Durante una operacin de insercin, se puede utilizar variables
con un tipo de datos uniqueidentifier y constantes de cadena con la forma xxxxxxxxxxxx-xxxx-xxxx-xxxxxxxxxxxx (36 caracteres incluidos los guiones, donde x es un
45

dgito hexadecimal, en el intervalo 0-9, o a-f) para columnas uniqueidentifier. Por


ejemplo, 6F9619FF-8B86-D011-B42D-00C04FC964FF es un valor vlido para una
variable o columna uniqueidentifier. Utilice la funcin NEWID() para obtener un
identificador exclusivo global (GUID).

Diapositiva 61

SELECT
Obtiene filas de la base de datos y permite realizar la seleccin de una o varias filas o
columnas de una o varias tablas. La sintaxis completa de la instruccin SELECT es
compleja, aunque las clusulas principales se pueden resumir del modo siguiente:
SELECT select_list
[ INTO new_table ]
FROM table_source
[ WHERE search_condition ]
[ GROUP BY group_by_expression ]
[ HAVING search_condition ]
[ ORDER BY order_expression [ ASC | DESC ] ]

Diapositiva 62

Clusula INTO
Crea una nueva tabla e inserta en ella las filas resultantes de la consulta.
El usuario que ejecuta una instruccin SELECT con la clusula INTO debe tener
permiso CREATE TABLE en la base de datos de destino. No se puede utilizar
SELECT...INTO con la clusula COMPUTE. Para obtener ms informacin, consulte
Transacciones y Transacciones explcitas.
Puede utilizar SELECT INTO para crear una definicin de tabla idntica (con diferente
nombre de tabla) sin datos mediante la definicin de una condicin FALSE en la
clusula WHERE.

Diapositiva 63

46

Devuelve la suma de todos los valores o de slo los valores DISTINCT en la expresin
especificada. SUM slo puede utilizarse con columnas numricas. Los valores nulos se
pasan por alto.

Diapositiva 64

Clusula WHERE
Especifica una condicin de bsqueda para restringir las filas que se van a devolver.
Sintaxis
[ WHERE < search_condition > | < old_outer_join > ]
< old_outer_join > ::=
column_name { * = | = * } column_name
Argumentos
<search_condition>
Limita las filas devueltas en el conjunto de resultados mediante el uso de predicados.
No hay lmite en el nmero de predicados que se pueden incluir en una condicin de
bsqueda. Para obtener ms informacin acerca de las condiciones de bsqueda y los
predicados, consulte Condicin de bsqueda.
< old_outer_join >
Especifica una combinacin externa con la sintaxis antigua especfica del producto y la
clusula WHERE. Se utiliza el operador *= para especificar una combinacin externa
izquierda y el operador =* para especificar una combinacin externa derecha.
Este ejemplo especifica una combinacin externa izquierda en que las filas de Tab1 que
no cumplen la condicin especificada se incluyen en el conjunto de resultados:
SELECT Tab1.name, Tab2.id FROM Tab1, Tab2 WHERE Tab1.id *=Tab2.id

Diapositiva 65

Clusula WHERE
Especifica una condicin de bsqueda para restringir las filas que se van a devolver.
Sintaxis
[ WHERE < search_condition > | < old_outer_join > ]
< old_outer_join > ::=
column_name { * = | = * } column_name
47

Argumentos
<search_condition>
Limita las filas devueltas en el conjunto de resultados mediante el uso de predicados.
No hay lmite en el nmero de predicados que se pueden incluir en una condicin de
bsqueda. Para obtener ms informacin acerca de las condiciones de bsqueda y los
predicados, consulte Condicin de bsqueda.
< old_outer_join >
Especifica una combinacin externa con la sintaxis antigua especfica del producto y la
clusula WHERE. Se utiliza el operador *= para especificar una combinacin externa
izquierda y el operador =* para especificar una combinacin externa derecha.
Este ejemplo especifica una combinacin externa izquierda en que las filas de Tab1 que
no cumplen la condicin especificada se incluyen en el conjunto de resultados:
SELECT Tab1.name, Tab2.id FROM Tab1, Tab2 WHERE Tab1.id *=Tab2.id

Diapositiva 66

LIKE
Determina si una cadena de caracteres dada coincide o no con un determinado modelo.
Un modelo puede incluir caracteres normales y caracteres comodn. Durante la
coincidencia de patrones, los caracteres regulares deben coincidir exactamente con los
caracteres especificados en la cadena de caracteres. Sin embargo, los caracteres
comodn pueden coincidir con fragmentos arbitrarios de la cadena de caracteres. Con
los caracteres comodn el operador LIKE es ms flexible que los operadores de
comparacin de cadenas = y !=. Si alguno de los argumentos no es del tipo de datos de
cadena de caracteres, Microsoft SQL Server lo convierte al tipo de datos de cadena
de caracteres, si es posible.

Diapositiva 67

Funciones de agregado
Las funciones de agregado realizan un clculo sobre un conjunto de valores y devuelven
un solo valor. Con la excepcin de COUNT, las funciones de agregado omiten los
valores NULL. Las funciones de agregado se suelen utilizar con la clusula GROUP
BY de la instruccin SELECT.
48

Todas las funciones de agregado son deterministas; devuelven siempre el mismo valor
cada vez que se les llama con un conjunto determinado de valores de entrada. Para
obtener ms informacin acerca del determinismo de funciones, consulte Funciones
deterministas y no deterministas.
Las funciones de agregado slo se aceptan como expresiones en:
La lista de seleccin de una instruccin SELECT (en una subconsulta o en la consulta
externa).

Clusulas COMPUTE o COMPUTE BY.

Clusulas HAVING.

AVG
Devuelve la media de los valores de un grupo. Los valores nulos se pasan por alto
COUNT
Devuelve el nmero de elementos de un grupo.
MIN
Devuelve el valor mnimo de la expresin.
MAX
Devuelve el valor mximo de la expresin.
SUM
Devuelve la suma de todos los valores o de slo los valores DISTINCT en la expresin
especificada. SUM slo puede utilizarse con columnas numricas. Los valores nulos se
pasan por alto.
STDEV
Devuelve la desviacin tpica estadstica de todos los valores de la expresin
especificada.

Diapositiva 68

Diapositiva 69

49

Funciones matemticas
Estas funciones escalares realizan un clculo, normalmente basado en valores de entrada
proporcionados como argumentos, y devuelven un valor numrico.
ABSDEGREESRANDACOSEXPROUNDASINFLOORSIGNATANLOGSINATN2L
OG10SQUARECEILINGPISQRTCOSPOWERTANCOTRADIANS

Nota Las funciones aritmticas, como ABS, CEILING, DEGREES, FLOOR, POWER,
RADIANS y SIGN, devuelven un valor del mismo tipo de datos que el valor de entrada.
Las funciones trigonomtricas y otras funciones, incluyendo EXP, LOG, LOG10,
SQUARE y SQRT, pasan los valores de entrada a float y devuelven un valor float.
Todas las funciones matemticas, excepto RAND, son funciones deterministas;
devuelven siempre el mismo resultado cada vez que se les llama con un conjunto
especfico de valores de entrada. RAND es determinista slo cuando se especifica un
parmetro de inicializacin. Para obtener ms informacin acerca del determinismo de
funciones, consulte Funciones deterministas y no deterministas.

ABS
Devuelve el valor absoluto, positivo de la expresin numrica dada.
RAND
Devuelve un valor float aleatorio de 0 a 1.
SIN
Devuelve el seno trigonomtrico del ngulo especificado (en radianes) en una expresin
numrica aproximada (float).
COS
Funcin matemtica que devuelve el coseno trigonomtrico del ngulo dado (en
radianes) en la expresin de entrada.
TAN
Devuelve la tangente de la expresin de entrada.
COT
Funcin matemtica que devuelve la cotangente trigonomtrica del ngulo especificado
(en radianes) en la expresin float.
SQRT
Devuelve la raz cuadrada de la expresin especificada.
50

POWER
Devuelve el valor de la expresin indicada elevada a la potencia especificada.
CEILING
Devuelve el entero ms pequeo mayor o igual que la expresin numrica dada.
FLOOR
Devuelve el entero ms grande menor o igual que la expresin numrica dada.
EXP
Devuelve el valor exponencial de la expresin float dada.

Diapositiva 70

Funciones de cadena
Estas funciones escalares realizan una operacin sobre una cadena de entrada y
devuelven un valor de cadena o un valor numrico.
Todas las funciones de cadena integradas, excepto CHARINDEX y PATINDEX, son
deterministas. Devuelven el mismo valor siempre que se llamen con un conjunto
determinado de valores de entrada. Para obtener ms informacin acerca del
determinismo de funciones, consulte Funciones deterministas y no deterministas.

LEFT
Devuelve la parte de una cadena de caracteres que comienza en un nmero de caracteres
especificado a partir de la izquierda.
RIGHT
Devuelve la parte de una cadena de caracteres que comienza en el nmero de caracteres
especificado en integer_expression a partir de la derecha.
LTRIM
Devuelve una expresin de caracteres despus de quitar los espacios en blanco a la
izquierda.
RTRIM
Devuelve una cadena de caracteres despus de truncar todos los espacios en blanco a la
derecha.
REPLACE
Reemplaza por una tercera expresin todas las apariciones de la segunda expresin de
cadena proporcionada en la primera expresin de cadena.
51

SUBSTRING
Devuelve parte de una expresin de caracteres, binaria, de texto o de imagen. Para
obtener ms informacin acerca de los tipos de datos vlidos de Microsoft SQL
Server que pueden utilizarse con esta funcin, consulte Tipos de datos.
STUFF
Elimina el nmero de caracteres especificado e inserta otro conjunto de caracteres en un
punto de inicio indicado.
UPPER
Devuelve una expresin de tipo carcter con datos de carcter en minscula convertidos
a mayscula.
LOWER
Devuelve una expresin de caracteres despus de convertir a minsculas los datos de
caracteres que estn en maysculas.
LEN
Devuelve el nmero de caracteres, en lugar del nmero de bytes, de la expresin de
cadena dada, excluidos los espacios finales en blanco.
CHAR
Una funcin de cadena que convierte un cdigo ASCII int en un carcter.
REVERSE
Devuelve invertida una expresin de carcter.

Diapositiva 71

Funciones de fecha y hora


Estas funciones escalares realizan una operacin sobre un valor de fecha y hora de
entrada, y devuelven un valor de cadena, numrico o de fecha y hora.
Esta tabla presenta las funciones de fecha y hora y su propiedad determinista. Para
obtener ms informacin acerca del determinismo de funciones, consulte Funciones
deterministas y no deterministas.

DATEADD
Devuelve un valor datetime nuevo que se basa en la suma de un intervalo a la fecha
especificada.
DATEDIFF
52

Devuelve el nmero de lmites de fecha y hora que hay entre dos fechas especificadas.
GETDATE
Devuelve la fecha y hora actuales del sistema en el formato interno estndar de
Microsoft SQL Server para los valores
DAY
Devuelve un entero que representa la parte del da de la fecha especificada.
MONTH
Devuelve un entero que representa el mes de una fecha especificada.
YEAR
Devuelve un entero que representa la parte de ao de la fecha especificada.

Diapositiva 72

Clusula ORDER BY
Especifica el orden del conjunto de resultados. La clusula ORDER BY no es vlida en
vistas, funciones en lnea, tablas derivadas ni subconsultas, salvo que se especifique
tambin TOP.
Sintaxis
[ ORDER BY { order_by_expression [ ASC | DESC ] }

[ ,...n] ]

Argumentos
order_by_expression
Especifica la columna segn la que se ordenar. Se puede especificar una columna de
orden como un nombre o alias de columna (que puede estar calificado con el nombre de
una tabla o vista), una expresin o un entero no negativo que representa la posicin del
nombre, alias o expresin en la lista de seleccin.
Se puede especificar varias columnas de orden. La secuencia de columnas de orden en
la clusula ORDER BY define la estructura del conjunto ordenado de resultados.
La clusula ORDER BY puede incluir elementos que no aparecen en la lista de
seleccin. Sin embargo, si se especifica SELECT DISTINCT, o si la instruccin
SELECT contiene un operador UNION, las columnas ordenadas deben aparecer en la
lista de seleccin.
Adems, cuando la instruccin SELECT contiene un operador UNION, los nombres o
los alias de las columnas deben ser los especificados en la primera lista de seleccin.

53

Nota Las columnas de tipo ntext, text o image no se pueden utilizar en una clusula
ORDER BY.
ASC
Indica que los valores de la columna especificada se deben ordenar de manera
ascendente, desde el valor ms bajo al ms alto.
DESC
Indica que los valores de la columna especificada se deben ordenar de manera
descendente, desde el valor ms alto al valor ms bajo.
Los valores NULL se tratan como los valores ms bajos posibles.
No hay lmite para el nmero de elementos en una clusula ORDER BY. Sin embargo,
existe un lmite de 8060 bytes en el tamao de fila de las tablas de trabajo intermedias,
necesarias para las operaciones de ordenacin. Este nmero limita el tamao total de las
columnas especificadas en una clusula ORDER BY.

Diapositiva 73

UPDATE
Cambia datos de una tabla.
Observaciones
Solamente se permiten las instrucciones UPDATE en el cuerpo de funciones definidas
por el usuario si la tabla a modificar es una variable table.
Es posible tener acceso a una variable table, en su mbito, como si fuera una tabla
normal. Por tanto, se puede utilizar una variable table como la tabla en la que se
actualizan los datos en una instruccin UPDATE.
Un nombre con cuatro partes, construido con la funcin OPENDATASOURCE como la
parte del nombre del servidor, puede utilizarse como origen de tabla en todas las
ocasiones en que puede aparecer un nombre de tabla en las instrucciones UPDATE.
Si la actualizacin de una fila infringe una restriccin o una regla, si infringe la
configuracin de valores NULL para la columna o si el nuevo valor es de un tipo de
datos incompatible, se cancela la instruccin, se devuelve un error y no se actualiza
ningn registro.
Cuando una instruccin UPDATE encuentra un error aritmtico (desbordamiento,
divisin por cero o un error de dominio) durante la evaluacin de la expresin, la

54

actualizacin no se lleva a cabo. El resto del lote no se ejecuta y se devuelve un mensaje


de error.
Si una actualizacin de una o varias columnas que participan en un ndice agrupado
provoca que el tamao del ndice agrupado y de la fila sea superior a 8.060 bytes, la
actualizacin falla y se devuelve un mensaje de error.
Cuando se define un desencadenador INSTEAD-OF en acciones UPDATE en una tabla,
se ejecuta el desencadenador en lugar de la instruccin UPDATE. Las versiones
anteriores de SQL Server slo admitan desencadenadores AFTER en INSERT y otras
instrucciones de modificacin de datos.

Diapositiva 74

DELETE
Es posible utilizar DELETE en el cuerpo de una funcin definida por el usuario si el
objeto que se va a modificar es una variable table.
Un nombre de tabla de cuatro partes (o un nombre de vistra) que utiliza la funcin
OPENDATASOURCE como el nombre de servidor, tambin se puede utilizar como un
origen de tabla en todos los lugares donde pueda aparecer un nombre de tabla.
La instruccin DELETE puede tener un error si infringe un desencadenador o intenta
quitar una fila a la que hacen referencia datos de otra tabla con una restriccin
FOREIGN KEY. Si la instruccin DELETE quita varias filas y cualquiera de las filas
eliminadas infringe un desencadenador o restriccin, se cancela la instruccin, se
devuelve un error y no se elimina ninguna fila.
Cuando se define un desencadenador INSTEAD-OF en las acciones DELETE en una
tabla o vista, se ejecuta el desencadenador en lugar de la instruccin DELETE. Las
versiones anteriores de SQL Server slo admitan desencadenadores AFTER en
DELETE y otras instrucciones de modificacin de datos.
Cuando una instruccin DELETE encuentra un error aritmtico (desbordamiento,
divisin entre cero o error de dominio) al evaluar una expresin, SQL Server trata ese
error como si SET ARITHABORT fuese ON. Se cancela el resto del proceso por lotes y
se devuelve un mensaje de error.
La configuracin de la opcin SET ROWCOUNT se ignora en las instrucciones
DELETE con tablas remotas y vistas divididas remotas y locales.

55

Si desea eliminar todas las filas de una tabla, TRUNCATE TABLE es ms rpido que
DELETE. DELETE quita fsicamente las filas de una en una y graba cada fila eliminada
en el registro de transacciones. TRUNCATE TABLE cancela la asignacin de todas las
pginas asociadas con la tabla. Por este motivo, TRUNCATE TABLE es ms rpido y
requiere menos espacio en el registro de transacciones que DELETE. TRUNCATE
TABLE es funcionalmente equivalente a DELETE sin clusula WHERE, pero no se
puede utilizar TRUNCATE TABLE con tablas a las que se hace referencia mediante
claves externas. DELETE y TRUNCATE TABLE dejan disponible el espacio ocupado
por las filas eliminadas para almacenar nuevos datos.

Diapositiva 75

Procedimientos almacenados de SQL


Un procedimiento almacenado es un grupo de instrucciones Transact-SQL compiladas
en un nico plan de ejecucin.
Los procedimientos almacenados de Microsoft SQL Server 2000 devuelven datos
de cuatro formas distintas:
Parmetros de salida, que pueden devolver datos (por ejemplo, un valor entero o de
carcter) o una variable de cursor (los cursores son conjuntos de resultados que pueden
devolver filas de una en una).

Cdigos de retorno, que siempre son un valor entero.

Un conjunto de resultados por cada instruccin SELECT contenida en el procedimiento


almacenado o en cualquier otro procedimiento almacenado invocado por el
procedimiento almacenado original.

Un cursor global al que se puede hacer referencia desde fuera del procedimiento
almacenado.
Los procedimientos almacenados contribuyen a conseguir una implementacin
coherente de una lgica entre las aplicaciones. Las instrucciones SQL y la lgica
56

necesarias para ejecutar una tarea de ejecucin frecuente se pueden disear, escribir y
probar de una sola vez en un procedimiento almacenado. As, las aplicaciones que
necesiten ejecutar dicha tarea slo tienen que ejecutar el procedimiento almacenado. La
escritura de la lgica comercial en un solo procedimiento almacenado tambin ofrece un
nico punto de control para asegurar la correcta ejecucin de dichas reglas comerciales.
Los procedimientos almacenados tambin pueden mejorar el rendimiento. Muchas
tareas estn implementadas como series de instrucciones SQL. La lgica condicional
aplicada a los resultados de las primeras instrucciones SQL determina las instrucciones
SQL que se ejecutan seguidamente. Si dichas instrucciones SQL y la lgica condicional
se escriben en un procedimiento almacenado, forman parte de un nico plan de
ejecucin en el servidor. No es necesario devolver los resultados al cliente para aplicar
la lgica condicional; todo el trabajo se realiza en el servidor. La instruccin IF de este
ejemplo muestra la inclusin de lgica condicional en un procedimiento para evitar el
envo de un conjunto de resultados a la aplicacin:
IF (@QuantityOrdered < (SELECT QuantityOnHand FROM Inventory WHERE PartID
= @PartOrdered) ) BEGIN -- SQL statements to update tables and process order. END
ELSE BEGIN -- SELECT statement to retrieve the IDs of alternate items -- to suggest
as replacements to the customer. END Las aplicaciones no tienen que transmitir todas
las instrucciones SQL del procedimiento: tienen que transmitir slo una instruccin
EXECUTE o CALL que contenga el nombre del procedimiento y los valores de los
parmetros.
Los procedimientos almacenados tambin aslan a los usuarios de los detalles de las
tablas de la base de datos. Si un conjunto de procedimientos almacenados admite todas
las funciones que los usuarios necesitan, los usuarios nunca tienen que tener acceso a las
tablas de forma directa; slo tienen que ejecutar los procedimientos almacenados que
implementan las funciones diarias de su trabajo.
Una ilustracin de este uso de los procedimientos almacenados es el sistema de
procedimientos almacenados que SQL Server utiliza para aislar a los usuarios de las
tablas del sistema. SQL Server incluye un conjunto de procedimientos almacenados del
sistema cuyos nombres suelen empezar por sp_. Dichos procedimientos almacenados
del sistema admiten todas las tareas administrativas requeridas para ejecutar un sistema
SQL Server. Los sistemas SQL Server se pueden administrar mediante las instrucciones
Transact-SQL destinadas a la administracin (como CREATE TABLE) o los

57

procedimientos almacenados del sistema, y nunca se tienen que actualizar directamente


las tablas del sistema.

Diapositiva 76

Diapositiva 77

Diapositiva 78

Crear base de datos y realizar consultas en AdventureWorks o Northwinds

58

Potrebbero piacerti anche