• No se han encontrado resultados

Manual SQL Server

N/A
N/A
Protected

Academic year: 2021

Share "Manual SQL Server"

Copied!
45
0
0

Texto completo

(1)

Material cofinanciado con fondos Comunitarios del Fondo Social Europeo, a través del Programa Operativo Plurirregional de Adaptabilidad y Empleo 2007ES05UPO001, para el periodo 2007-2013, con un porcentaje de cofinanciación del 80%.

GESTIONA:

DEPARTAMENTO DE FORMACIÓN. FEDECO.

A

N

A

L

IS

T

A

P

R

O

G

R

A

M

A

D

O

R

B

A

S

E

S

D

E

D

A

T

O

S

Y

S

Q

L

(2)

ÍNDICE

1. Conceptos básicos ... 3

1.1. ¿Qué es una base de datos?... 3

1.2. Fundamentos del diseño de BD ... 3

1.3. Tipos de BD... 3

1.4. Bases de datos relacionales... 4

1.5. Clave principal (primary key) y externa (foreign key)... 4

1.6. Presentación de la Base de Datos PedidosBD ... 4

2. Instalación de SQL Server 2005... 5

3. Componentes instalados ... 14

4. Administrador de configuración... 14

5. Informes de uso y errores de SQL Server ... 17

6. Configuración de superficie de SQL Server... 17

7. Crear una base de datos ... 20

7.1. Ficheros de la base de datos ... 20

7.2. Creación de base de datos desde SQL Server 2005 Management Studio Express ... 21

7.3. Consideraciones... 23

8. Tipos de datos... 24

8.1. Tipos de datos numéricos ... 24

8.1.1. Tipos de datos numéricos enteros... 24

8.1.2. Tipos de datos numéricos decimales ... 24

8.1.3. Tipos de datos caracteres ... 26

8.1.4. Tipos de datos fecha ... 26

8.1.5. Otros tipos de datos ... 27

9. Crear tablas ... 27

9.1. Diseñar y crear tablas ... 27

9.2. Relacionar tablas... 31

9.3. Otras restricciones (UNIQUE, CHEK, DEFAULT) ... 34

10. Creación de índices... 35

11. Consultas de Selección ... 38

11.1. Selección de columnas y cláusula FROM ... 38

11.2. Cláusula WHERE ... 41

11.3. Cláusula JOIN ... 41

11.4. Cláusula GROUP BY... 42

11.5. Cláusula TOP (n) [PERCENT] ... 43

11.6. Expresiones de tablas comunes (CTE) ... 43

11.7. Consultas de modificación... 44

11.7.1. Sentencia INSERT... 44

(3)

Material cofinanciado con fondos Comunitarios del Fondo Social Europeo, a través del Programa Operativo Plurirregional de Adaptabilidad y Empleo 2007ES05UPO001, para el periodo 2007-2013, con un porcentaje de cofinanciación del 80%.

1.

Conceptos básicos

1.1.¿Qué es una base de datos?

Una BD es un objeto para almacenar información compleja estructurada. Lo que distingue a una BD es el hecho de estar diseñadas para recuperar los datos fácilmente. El propósito de una BD es poco más que el almacenamiento de información y su rápida recuperación. Es decir, debe estructurar su base de datos de manera que se pueda consultar de una forma rápida y eficaz.

1.2.Fundamentos del diseño de BD

El diseño de BD más que nada, requiere sentido común. El objetivo de las BD es resolver problemas prácticos para las empresas en el día a día: almacenamiento y recuperación de información.

Hay algunos puntos importantes que debe tener en cuenta:

1. Cualquier error en una BD surgirá más adelante, cuando intente recuperar datos de la misma. Si sus datos no están bien organizados en la base de datos, no podrá extraer la información deseada.

2. Mantener la integridad. La información guardada dentro de la BD debe ser correcta. Se debe mantener una integridad y consistencia de datos no permitiendo realizar operaciones no deseadas con los datos guardados. 3. Es conveniente que el DBMS sea el encargado de mantener la integridad de

datos.

Nota.- definir lo que es un DBMS o Sistema Gestor de Base de Datos.

1.3.Tipos de BD

• Archivos planos • Archivos INI

• Registro del sistema de Windows • Bases de datos relacionales • Hojas de cálculo

• Bases de datos jerárquicas • XML

• Objetos

• Objeto-relacionales

• Orientada a los documentos • Deductivas

• Dimensionales • Temporales

(4)

1.4.Bases de datos relacionales

Son BD que se fundamentan en las relaciones entre los datos que contienen. Estos datos se almacenan en tablas, que contienen información relacionada entre sí, entidades. El objetivo es mantener las tablas con un tamaño reducido y manejable evitando, en la medida de lo posible, la redundancia de datos.

Las entidades no son independientes unas de otras. Por ejemplo, los pedidos se sitúan por clientes específicos, por lo que las filas de la tabla clientes se deben unir a las filas de la tabla pedidos, que almacena los pedidos de los clientes. Estos tipos de uniones se denominan relaciones. Las BD relacionales se basan en este tipo de relaciones.

1.5.Clave principal (primary key) y externa (foreign key)

Las relaciones se implementan insertando filas con valores concordantes en las dos tablas referenciadas. Las líneas que conectan las dos tablas indican simplemente que hay dos campos, uno a cada lado de la relación, con un valor común. A estos dos valores se les llama campos clave. Por ejemplo, el campo IDCliente de la tabla Clientes, se denomina clave principal (primary_key) porque identifica a un solo cliente. El campo IDCliente de la tabla Pedidos sería la clave externa (foreign_key) de la relación. Una clave principal sólo puede darse en una fila, mientras que una clave externa puede tener más de una concurrencia en distintas filas. De hecho, aparecerá tantas veces en la tabla Pedidos como pedidos tenga el cliente en cuestión.

1.6.Presentación de la Base de Datos PedidosBD

La BD PedidosDB almacena información de ventas: los clientes y productos que han solicitado cada uno y sus precios.

Tablas de PedidosDB - Clientes - Productos - TiposProductos - Pedidos - PedidosDetalles

Explicación de las relaciones entre las tablas

En una BD cada tabla tiene un campo con un valor único para cada fila. Este campo se marca con el icono de una llave y representa la clave principal de la tabla. El único

(5)

Material cofinanciado con fondos Comunitarios del Fondo Social Europeo, a través del Programa Operativo Plurirregional de Adaptabilidad y Empleo 2007ES05UPO001, para el periodo 2007-2013, con un porcentaje de cofinanciación del 80%.

r e

quisito es que esas claves primarias sean únicas en toda la tabla.

Las filas relacionadas en una tabla repiten la clave principal de la fila con la que se relacionan en otra tabla. Las copias de las claves principales en todas las demás tablas se denominan claves externas. Lo que hace a un campo ser clave externa es que coincide con la clave principal de otra tabla.

2.

Instalación de SQL Server 2005

El primer paso de la instalación consiste en instalar Microsoft .NET Framework 2.0 que es uno de los requisitos de la instalación; si ya está instalado previo al proceso de instalación, este paso será omitido. La actualización desde versiones anteriores de .NET Framework está soportada hasta la versión 1.1, en caso de haber instalado una versión posterior, deberá desinstalarla antes de instalar SQL Server 2005 Express; en otras palabras, la actualización se puede realizar sólo desde versiones soportadas de .NET Framework.

Ventana de condiciones de EULA; aceptar los términos de la licencia y condiciones y pulsar siguiente.

(6)

Ventana de bienvenida de instalación de los prerrequisitos necesarios para SQL Server 2005 Express; pulsar Instalar.

(7)

Material cofinanciado con fondos Comunitarios del Fondo Social Europeo, a través del Programa Operativo Plurirregional de Adaptabilidad y Empleo 2007ES05UPO001, para el periodo 2007-2013, con un porcentaje de cofinanciación del 80%.

Ventana de bienvenida al asistente de instalación de SQL Server 2005 Express; pulsar siguiente.

Ventana de comprobación de requerimientos del sistema; si la comprobación ha sido satisfactoria, todas las opciones aparecerán con la opción de verificación en color verde, en caso de haber algún requerimiento no severo, aparecerá en color amarillo;

(8)

hay algún requerimiento crítico que no se cumple, aparecerá en color rojo y no podrá seguirse con el proceso de instalación. Pulsando en el botón Report, podrá ver cuales son los requisitos no cumplidos para poder preparar al sistema para cumplirlos; por ejemplo, si no se cumplen los requerimientos de ASP.NET, podrá salir de la instalación, actualizar ASP.NET, y volver a realizar la instalación. Si la comprobación ha sido satisfactoria, pulse Siguiente.

Introduzca la información de registro, desmarque la opción Ocultar opciones avanzadas de configuración, y pulse s iguiente.

(9)

Material cofinanciado con fondos Comunitarios del Fondo Social Europeo, a través del Programa Operativo Plurirregional de Adaptabilidad y Empleo 2007ES05UPO001, para el periodo 2007-2013, con un porcentaje de cofinanciación del 80%.

componentes y pulse Siguiente.

Seleccione el nombre de la instancia de SQL Server 2005 Express (por defecto SQLExpress), y pulse siguiente.

Seleccione el nombre de la cuenta que arrancará el servidor de SQL Server 2005 Express (Network Service por defecto), y habilite que el servicio de SQL Server se arranque al finalizar la instalación; a continuación pulse Siguiente.

(10)

Seleccione el modo de autenticación (por defecto autenticación integrada de Windows), y pulse Siguiente.

Seleccione el collation de la instancia de SQL Server. Como es una instalación nueva, y no se va a trabajar con bases de datos de versiones anteriores de SQL Server, se seleccionará Latin1_General, en caso de migraciones o posibilidad de trabajar con bases de datos importadas de SQL Server 2000 (o MSDE 2000), considere la

(11)

Material cofinanciado con fondos Comunitarios del Fondo Social Europeo, a través del Programa Operativo Plurirregional de Adaptabilidad y Empleo 2007ES05UPO001, para el periodo 2007-2013, con un porcentaje de cofinanciación del 80%.

o p

ción por defecto (SQL Collations, Dictionary-order, case insensitive, for use with 1252 Character Set); a continuación pulse Siguiente.

Seleccionar la opción de configuración de la instancia de SQL Server sobre la posibilidad de permitir a usuarios no-administradores de crear instancias. Por defecto habilitado; durante las siguientes lecciones se hablará de ello, habilítelo y pulse Siguiente.

(12)

Opciones para informar a Microsoft sobre los errores no esperados sucedidos en la aplicación, y para enviar automáticamente información sobre las características usadas del producto; por defecto están deshabilitadas, pero se recomienda habilitarla para mejorar el producto enviando automáticamente información del uso que se hace del producto; a continuación se pulsa en Siguiente.

Comienza el proceso de instalación informando de las características que se van instalando.

(13)

Material cofinanciado con fondos Comunitarios del Fondo Social Europeo, a través del Programa Operativo Plurirregional de Adaptabilidad y Empleo 2007ES05UPO001, para el periodo 2007-2013, con un porcentaje de cofinanciación del 80%.

Finalización del proceso de instalación con estado de casa funcionalidad instalada; en caso de haber algún error durante la instalación, aparecerán botones en color Rojo indicando el error; pulsando en la casilla correspondiente de la columna Status, podrá ver información del error producido; pulse Siguiente.

Informe final de la instalación de SQL Server en el que se podrá ver todas las características instaladas, y un fichero de resumen con cada paso realizado durante la instalación. Pulse Finalizar, y ya está preparado para poder utilizar SQL Server 2005 Express.

(14)

3.

Componentes instalados

Para acceder a los componentes instalados en SQL Server 2005 Express, deberá hacer click en Inicio, Todos los Programas, Microsoft SQL Server 2005, Herramientas de configuración como ve en la siguiente imagen:

Las opciones disponibles son las siguientes: - Administrador de configuración

- Informes de uso y errores de SQL Server - Configuración de superficie de SQL Server - SQLCMD (opción de línea de comando)

4.

Administrador de configuración

Componente basado en Microsoft Management Console (MMC), con el que se puede administrar la configuración de los servicios SQL Server, protocolos de red utilizados, y configurar el cliente nativo de acceso a SQL Server. Es una herramienta que realiza todas las modificaciones haciendo uso de las nuevas APIs de administración SMO (sustituto de SQL- DMO). El hecho de usar tales APIs nos da la posibilidad de poder crear aplicaciones personalizadas para configurar el servidor; por ejemplo, se podría crear una aplicación basada en SMO que implemente o extienda las funcionalidades expuestas a través de la aplicación MMC. La aplicación tiene la siguiente apariencia:

(15)

Material cofinanciado con fondos Comunitarios del Fondo Social Europeo, a través del Programa Operativo Plurirregional de Adaptabilidad y Empleo 2007ES05UPO001, para el periodo 2007-2013, con un porcentaje de cofinanciación del 80%.

Al igual que desde el administrador de servicios del sistema operativo, se pueden cambiar las propiedades del servicio; la gran diferencia, es que mientras las llamadas de la aplicación MMC de los servicios realiza llamadas a las APIs del Kernel de Windows, el Administrador de Configuración, realiza las llamadas a través de las APIs de SMO.

Se pueden configurar, habilitar o deshabilitar protocolos; configurar, o modificar puertos TCP/IP como se ve en la imagen:

(16)

Así como establecer el orden de los protocolos de Red; en el siguiente ejemplo, están habilitados los protocolos Shared Memory, TCP/IP, y Named Pipes, mientras que el protocolo VIA está deshabilitado:

Nota. Recuerde que la mayoría de estos cambios no tendrán efecto hasta que el servicio de SQL Server haya sido reiniciado.

(17)

Material cofinanciado con fondos Comunitarios del Fondo Social Europeo, a través del Programa Operativo Plurirregional de Adaptabilidad y Empleo 2007ES05UPO001, para el periodo 2007-2013, con un porcentaje de cofinanciación del 80%.

5.

Informes de uso y errores de SQL Server

La utilidad permite modificar las opciones de configuración relativas al feedback que se envía a Microsoft en cuanto al uso de las características del producto, e informe de errores no esperados. El nivel de detalle llega hasta el nivel de instancia, es decir, podemos decidir qué instancias envían información sobre los errores no esperados, o sobre el uso de las funcionalidades del producto:

6.

Configuración de superficie de SQL Server

El aplicativo configuración de superficie de SQL Server es un asistente que ayuda a configurar cuales son las partes de SQL Server que se encuentran expuestas a interactuación desde el exterior. La filosofía del aplicativo es ayudar a configurar de manera sencilla y rápida los puntos de acceso al servidor. El aplicativo expone al usuario funcionalidades tales como configuración de servicios, y configuración de características de SQL Server; por ejemplo, CLR habilitado o no, soporte HTTP habilitado o no, endpoints configurados en el servidor, etc.

(18)

El aplicativo permite modificar la configuración del servicio de SQL Server

También permite configurar el tipo de conexiones permitida sobre el servidor. Por ejemplo, SQL Server 2005 Express permite por defecto sólo conexiones locales; esto quiere decir

(19)

Material cofinanciado con fondos Comunitarios del Fondo Social Europeo, a través del Programa Operativo Plurirregional de Adaptabilidad y Empleo 2007ES05UPO001, para el periodo 2007-2013, con un porcentaje de cofinanciación del 80%.

que no se pueden realizar conexiones desde equipos externos a menos que se configure de servidor para permitirlo. Desde la aplicación, se podrá habilitar la posibilidad de conexiones de equipos remotos, y los protocolos de conexión permitidos.

En cuanto a las opciones de configuración de funcionalidades del motor de base de datos, se incluyen:

- Posibilidad de habilitar o deshabilitar la ejecución de consultas con OPENROWSET y OPENDATASOURCE: lo que estas funciones permiten es realizar consultas a servidores remotos (servidores expuestos a través de un origen de datos del que se provea drivers de acceso como ODBC, OLEDB, etc.) sin la necesidad de tener que crear un servidor vinculado.

- Habilitar el soporte del CLR: creación de objetos de base de datos con cualquier lenguaje .NET Framework.

- Habilitar el soporte nativo de Servicios Web: opción sólo disponible en la versión Enterprise de SQL Server 2005 que permite exponer SQL Server 2005 sin necesidad de implementar Servicios Web expuestos por IIS.

- Habilitar el uso de Automatización OLE con sentencias T-SQL: posibilidad de realizar llamadas a objetos COM desde Transact-SQL con los procedimientos almacenados de sistema sp_OACreate, sp_OAGetProperty, sp_OASetProperty, sp_OAMethod, sp_OAStop, y sp_OADestroy. Automatización OLE entrará en desuso debido a la integración del CLR y su consiguiente facilidad para implementarlo mediante .NET Framework en lugar de objetos COM.

(20)

- Habilitar el uso del procedimiento almacenado de sistema xp_cmdshell que permite ejecutar comandos de sistema en el servidor (tales como DIR, DELETE, COPY, etc.)

- Habilitar el uso de endpoints de Service Broker.

7.

Crear una base de datos

Cuando se crea una base de datos, es importante comprender cómo SQL Server almacena los datos para poder calcular y especificar la cantidad de espacio en disco que hay que asignar a los archivos de datos y registros de transacciones. Aunque SQL Server automáticamente incrementa el tamaño asignado a los ficheros de bases de datos dinámicamente, para tener un rendimiento óptimo del sistema (evitar fragmentación de los ficheros), se recomienda ser "precisos" a la hora de definir el tamaño de la base de datos.

7.1.Ficheros de la base de datos

Todas las bases de datos tienen un archivo de datos principal (.mdf), y uno o varios archivos de registro de transacciones (.ldf). Una base de datos también puede tener archivos de datos secundarios (.ndf). La extensión definida para cada tipo de archivos es libre, pero como buenas prácticas se suele seguir el modelo de extensiones recomendado por Microsoft (mdf, ldf, y ndf). El proceso de creación de la base de datos, consiste en hacer una copia de la base de datos model, que

(21)

Material cofinanciado con fondos Comunitarios del Fondo Social Europeo, a través del Programa Operativo Plurirregional de Adaptabilidad y Empleo 2007ES05UPO001, para el periodo 2007-2013, con un porcentaje de cofinanciación del 80%.

incluye las tablas del sistema. La ubicación predeterminada para todos los archivos de datos y registros de transacciones es C:\Archivos de programa\Microsoft SQL Server\MSSQL.1\MSSQL\Data.

La base de datos puede configurarse con tres modelos de recuperación en caso de fallo del sistema (FULL, BULK_LOGGED, y SIMPLE); evalúa cada modelo en base a las necesidades del sistema que estés implementando.

7.2.Creación de base de datos desde SQL Server 2005 Management Studio Express

SQL Server Management Studio Express es la herramienta de administración incluida con SQL Server Express; la herramienta no fué incluida en la primera distribución de SQL Server Express, y se puede descargar de forma gratuita de la siguiente url:

Microsoft SQL Server Management Studio Express - Community Technology Preview (CTP) November 2005:

http://www.microsoft.com/downloads/details.aspx?familyid=82afbd59-57a4-455e-a2d6-1d4c98d40f6e&displaylang=en

Para crear una base de datos desde SQL Server 2005 Management Studio, expande la lista de bases de datos, de la lista de instancias de SQL Server 2005 registradas, y selecciona la opción "New database":

(22)

Deberás rellenar el nombre de base de datos, nombres lógico y físico de los archivos relacionados, y tamaño de los ficheros, así como su crecimiento:

Y deberás establecer el modo de recuperación de la base de datos; en la versión Express al crear una base de datos por defecto se establece como recuperación SIMPLE:

(23)

Material cofinanciado con fondos Comunitarios del Fondo Social Europeo, a través del Programa Operativo Plurirregional de Adaptabilidad y Empleo 2007ES05UPO001, para el periodo 2007-2013, con un porcentaje de cofinanciación del 80%.

Para familiarizarse con la sintaxis del lenguaje T-SQL, te recomiendo que utilices la opción de menú script (en recuadro verde en las dos imágenes anteriores), que mostrará la instrucción T-SQL correspondiente a las operaciones que has ido configurando en las distintas opciones.

7.3.Consideraciones

Dependiendo de las necesidades a cubrir del sistema de base de datos a desarrollar, deberás configurar los archivos de una forma u otra; por ejemplo, en grandes sistemas llegarás a configurar niveles de redundancia de discos (RAID), y repartidas la información de las tablas en distintos ficheros. Aunque no está soportado en la versión Express, funcionalidades del producto como Particionado de datos, llegan a ser primordiales, y es un factor a considerar desde el momento de diseño del sistema.

Por otro lado, para familiarizarte con SQL Server, recomendaría entender las opciones de configuración de base de datos que aparecen en la pestaña opciones, que aunque no son necesarias para comenzar a diseñar bases de datos SQL Server, si ayudan a comprender un poco el funcionamiento interno de SQL Server (shrink, statistics, etc.):

(24)

8.

Tipos de datos

Empezaremos por los tipos de datos. Las tablas tienen columnas, y las columnas se definen en base a un tipo de datos; los tipos de datos acotan el tipo y tamaño de la información que se guardará en una columna. La importancia de la elección de los tipos de datos reside en el almacenamiento que ocupa; para varios cientos de filas, el tamaño no es tan crucial, pero cuantas más filas se añadan a la tabla, mayor será la repercusión en el rendimiento de las operaciones de E/S.

Como veremos, habrá tipos de datos en los que habrá que seleccionar el tamaño, e incluso algunos tendrán la posibilidad de ofrecer tamaño variable; vamos a analizar los más significativos.

8.1.Tipos de datos numéricos

Los tipos de datos numéricos se utilizan para guardar valores numéricos enteros, o decimales. Los dividiremos en dos grandes grupos: enteros, y decimales.

8.1.1. Tipos de datos numéricos enteros

Tipo de datos Intervalo Almacenamiento

bigint De -2^63 (-9.223.372.036.854.775.808) a 2^63-1 (9.223.372.036.854.775.807) 8 bytes int De -2^31 (-2.147.483.648) a 2^31-1 (2.147.483.647) 4 bytes smallint De -2^15 (-32.768) a 2^15-1 (32.767) 2 bytes tinyint De 0 a 255 1 bytes

bit 0,1 1 bit, mímino

1 bytes Tradicionalmente el tipo de datos más usado es el int; el tipo de datos bigint apareció en SQL Server 2000, y es la alternativa al tipo de datos int, cuando los valores son muy grandes.

8.1.2. Tipos de datos numéricos decimales

Decimal, numeric

Tipo de datos numérico con precisión y escala fijas. decimal[ (p[ , s] )] y numeric[ (p[ , s] )]

Números de precisión y escala fijas. Cuando se utiliza la precisión máxima, los valores permitidos están comprendidos entre - 10^38 +1 y

(25)

Material cofinanciado con fondos Comunitarios del Fondo Social Europeo, a través del Programa Operativo Plurirregional de Adaptabilidad y Empleo 2007ES05UPO001, para el periodo 2007-2013, con un porcentaje de cofinanciación del 80%.

1

0^38 - 1. Numeric equivale funcionalmente a decimal p (precisión)

El número total máximo de dígitos decimales que se puede almacenar, tanto a la izquierda como a la derecha del separador decimal. La precisión debe ser un valor comprendido entre 1 y la precisión máxima de 38. La precisión predeterminada es 18.

s (escala)

El número máximo de dígitos decimales que se puede almacenar a la derecha del separador decimal. La escala debe ser un valor comprendido entre 0 y p. Para especificar la escala es necesario haber especificado la precisión.

Y la relación entre precisión y almacenamiento es: Precisión Almacenamiento 1-9 5 10-19 9 20-28 13 29-38 17 money, smallmoney

Tipos de datos que representan valores monetarios o de moneda.

Tipo de datos Precisión Almacenamiento

money De -922,337,203,685.477,5808 a 922,337,203,685.477,5807 8 bytes

smallmoney De - 214.748,3648 a 214.748,3647 4 bytes

float(n), single

Tipos de datos numéricos y aproximados que se utilizan con datos numéricos de coma flotante. Los datos de coma flotante son aproximados; por tanto, no todos los valores del intervalo del tipo de datos se pueden representar con exactitud.

Tipo de

datos Precisión Almacenamiento

float De - 1,79E+308 a -2,23E-308, 0 y de 2,23E-308 a 1,79E+308

Depende del valor de n (4 u 8 bytes)

real De - 3,40E + 38 a -1,18E - 38, 0 y de 1,18E - 38 a

(26)

8.1.3. Tipos de datos caracteres

Los tipos de datos carácter se puede definir de longitud fija y de longitud variable.

Los de longitud fija son char(n) y su tamaño lo define el valor que tenga n. Por ejemplo, una columna char(15) ocupa 15 bytes.

Los de longitud variable son varchar(n), y su tamaño lo define la logitud de la columna guardada; por ejemplo una columna varchar(250), que guarda el valor "columna variable" el almacenamiento que ocupa es 16 bytes. En caso de desear valores Unicode, deberás anteponer al tipo de datos la letra n, siendo los tipos nchar, o nvarchar. La principal diferencia con los tipos de datos no-unicode, es que utilizan el doble de bytes. Por ejemplo, el texto "Tutorial", en una columna varchar(100) ocuparía 8 bytes, mientras que siendo unicode ocuparía 16 bytes.

El tamaño de las columnas char, varchar, nchar, nvarchar está limitado a 8000 bytes de almacenamiento; en caso de necesitar mayor longitud puedes usar el tipo de datos varchar(max) o nvarchar(max), que es nuevo en SQL Server 2005.

8.1.4. Tipos de datos fecha

smalldatetime, datetime

Son los tipos de datos utilizados para representar la fecha y la hora. El valor internamente se almacena como un valor integer, y dependiendo de la precisión utilizará 4 u 8 bytes.

Tipo de datos Precisión Almacenamiento

smalldatetime Del 1 de enero de 1900 hasta el 6 de junio de 2079 4 u 8 bytes Datetime Del 1 de enero de 1753 hasta el 31 de diciembre de 9999 8 bytes

El tipo de datos smalldatetime almacena las fechas y horas del día con menor precisión que datetime. El Database Engine (Motor de base de datos) almacena los valores smalldatetime como dos enteros de 2 bytes. Los dos primeros bytes almacenan el número de días después del 1 de enero de 1900. Los otros dos, almacenan el número de minutos desde medianoche. Los valores datetime se redondean con incrementos de 0,000; 0,003 o 0,007 segundos, como se muestra en la siguiente tabla.

(27)

Material cofinanciado con fondos Comunitarios del Fondo Social Europeo, a través del Programa Operativo Plurirregional de Adaptabilidad y Empleo 2007ES05UPO001, para el periodo 2007-2013, con un porcentaje de cofinanciación del 80%.

8.1.5. Otros tipos de datos

Se pueden crear tipos definidos de usuario que suele ayudar para unificar el diseño de las tablas; por ejemplo, se puede crear un tipo llamado NIF que corresponde al tipo de datos CHAR(20), y admite valores nulos.

CREATE TYPE NIF FROM char(20) NULL

XML

La versión 2005 de SQL Server incorpora el tipo de datos nativo XML. El tipo de datos obliga a que el dato sea por lo menos bien formado (well-formed). Adicionalmente, la columna puede asociarse a un esquema XSD. Esta es una característica muy interesante porque cada día se están guardando más datos en formato XML, y las aplicaciones cliente tienen que soportar el coste y codificación de validar el dato a guardar. La otra gran funcionalidad que incorpora el tipo de datos XML es que se puede hacer consultas XPath 2.0 contra la columna XML; además la columna se puede indexar para optimizar las consultas XPath.

Tipos de datos definidos de usuario en .NET

La integración del CLR, permite la posibilidad de definir tipos de datos con cualquier lenguaje .NET; durante el curso no se va a tratar este tema, pero como recomendación general, sólo deberían usarse para definir estructuras complejas; por ejemplo, coordenadas 3D, o 2D, números complejos, etc. nunca para implementar estructuras relacionales.

9.

Crear tablas

Las tablas son objetos que contienen la información guardada en la base de datos. Una tabla es una colección de columnas; cada columna tendrá un tipo de dato y una serie de propiedades. La información está guardada fila por fila de forma similar a lo que gráficamente representa una hoja Excel: una colección de filas por columnas.

9.1. Diseñar y crear tablas

Para crear tablas podremos utilizar SQL Server 2005 Management Studio Express, o Visual Basic Express Edition; la forma es muy similar en ambas herramientas, y esta vez también utilizaremos SQL Server 2005 Management Studio Express.

Expandiendo la base de datos "PedidosDB", vemos una lista de tipos de objetos entre las que se encuentra "tables"; pulsando el botón derecho del ratón, y selecciona "New Table" como aparecen en la siguiente imagen:

(28)
(29)

Material cofinanciado con fondos Comunitarios del Fondo Social Europeo, a través del Programa Operativo Plurirregional de Adaptabilidad y Empleo 2007ES05UPO001, para el periodo 2007-2013, con un porcentaje de cofinanciación del 80%.

En el cuadro marcado en rojo, se añaden cada una de las columnas que forman parte de la tabla a crear; se pone nombre a la columna (debe comenzar por un carácter alfabético), se selecciona el tipo de datos y precisión (ver lección anterior para más información), y se establece si la columna aceptará valores nulos o no.

En el cuadro de debajo (en color azul), se podrán establecer las propiedades de cada columna de la tabla; se podrán modificar las propiedades vistas anteriormente, si la columna es calculada o no, si tiene propiedad identidad (que veremos más adelante en el capítulo), etc. A la derecha, en el cuadro verde, se podrán establecer propiedades de la tabla; como esquema al que pertenece la tabla, nombre de la tabla, descripción de la tabla, y grupo de ficheros donde se almacenará la tabla.

Además toda tabla debe tener una columna o conjunto de columnas que identifique de manera única cada fila de la tabla; para ello selecciona la columna que deseas como clave primaria, y después de hacer clic en el botón derecho del ratón, selecciona "Primary Key" como se muestra en la imagen (también se puede hacer sobre el botón marcado en rojo en la imagen):

A continuación, para grabar los cambios, es decir, para generar la tabla, pulsarás sobre la zona en color verde de la siguiente imagen, y seleccionarás la opción Save Clientes (que es el nombre de la tabla):

(30)

Propiedad identity en las columnas

La propiedad identity, establece que una columna numérica genere automáticamente valores consecutivos partiendo de una semilla inicial, y un incremento definido. Se suele utilizar como clave primaria, en lugar de establecer claves primarias de columnas o conjuntos de columnas muy grandes. Lo importante de esta propiedad es que "convierte" automáticamente el valor de una columna a un valor numérico siguiente al anteriormente insertado. Por ejemplo, si definimos la columna Id de la tabla clientes como identity, a la hora de insertar filas, de esa columna nos "olvidaremos" porque SQL Server lo hace por nosotros. Luego ese valor lo podremos usar como referencia principal (clave primaria), para identificar la fila insertada. Para establecer la propiedad identity, debes seleccionar la columna a la que deseas establecer la propiedad, y hacerlo desde la ventana de propiedades de columna (cuadro rojo de la siguiente imagen):

(31)

Material cofinanciado con fondos Comunitarios del Fondo Social Europeo, a través del Programa Operativo Plurirregional de Adaptabilidad y Empleo 2007ES05UPO001, para el periodo 2007-2013, con un porcentaje de cofinanciación del 80%.

9.2.Relacionar tablas

Las tablas se relacionan entre sí; podría decirse que existe información de la fila que está guardada en varias tablas. El nexo de unión de las filas es la clave primaria en la tabla padre, y la clave primaria en la tabla hija. Por ejemplo, una relación entre clientes y pedidos; en la tabla pedidos existirá un identificador de cliente que está asociado a un identificador de cliente en la tabla clientes. La información estaría repartida como sigue:

Tabla Clientes

ID Nombre Apellidos ... 1 Julia Herrera ... 2 Javier Alonso ...

Tabla Pedidos

IDPedido IDCliente Importe ...

1 1 1200 ...

2 1 1300 ...

3 1 12000 ...

4 2 1000 ...

Fíjate que el cliente 1 (Julia Herrera), tiene los pedidos del 1 al 3, y el cliente 2 el pedido 4. La información la "interpretamos" como si las filas de cliente en "embebiera dentro de la tabla pedidos:

Nuestra interpretación de la relación Pedidos-Clientes IDPedido IDCliente Nombre-Cli Apellido-Cli Importe ...

1 1 Julia Herrera 1200 ...

2 1 Julia Herrera 1300 ...

3 1 Julia Herrera 12000 ...

4 2 Javier Alonso 1000 ...

Visto el esquema, vamos a implementar la tabla Pedidos, definiendo la clave ajena a la tabla clientes. Para ello, después de haber añadido las columnas que definen la tabla pedidos (ID, IDCliente, y Cantidad), pulsaremos en el botón habilitado para establecer relaciones, o seleccionaremos la opción "Relationships...":

(32)

Aparecerá una ventana como la que se muestra a continuación, en la que expandirás la opción "Tables and columns specifications", y pulsarás en el botón encuadrado con bordes azules, para establecer la relación entre las tablas:

A continuación, rellenarás los combos que aparecen para establecer la relación entre las tablas clientes y pedidos (columnas ID de clientes, e IDCliente de Pedidos):

(33)

Material cofinanciado con fondos Comunitarios del Fondo Social Europeo, a través del Programa Operativo Plurirregional de Adaptabilidad y Empleo 2007ES05UPO001, para el periodo 2007-2013, con un porcentaje de cofinanciación del 80%.

Para finalizar pulsa en aceptar, y expandes la opción "Insert and Update Expecifications", en la que se podrá especificar cómo establecer el valor de la columna en caso de que la fila padre haya sido borrada o modificada. En SQL Server 2005, se permiten dos opciones:

• No Action. Que indica que no actual, que se deja la columna como estaba.

• Cascade. Que se realiza la misma operación que se hizo en la fila de la tabla padre.

• Set Null. Que establece a nulo el valor de las columnas afectadas.

(34)

Con un ejemplo se verá más claro; digamos que se borra el cliente 2 (Javier Alonso); al borrar al cliente, las opciones que acabamos de comentar se activarán, y actuarán según las hayamos configurado; Veamos como se comportaría en cada uno de los casos:

• No Action. El pedido se quedaría igual, es decir, el pedido número 4 se quedaría con referencia al cliente 2, que en realidad ya no existe.

• Cascade. Como se trataba de una operación de borrado de clientes, al borrar al cliente, también se borrarían los pedidos asociados al cliente 2; en nuestro ejemplo, el pedido número 4, se eliminaría.

• Set Null. Al realizar el borrado, el pedido número 4 se quedaría con

identificador de cliente a un valor nulo; es decir, el pedido seguiría existiendo, pero no estaría asociado a ningún cliente.

• Set Default. Se establecería un valor por defecto; en nuestro caso no hemos definido ningún valor por defecto, pero podríamos establecer un valor por defecto para identificar los pedidos cuyos clientes han sido eliminados. Todas estas operaciones que hemos realizado desde las herramientas gráficas, también se pueden hacer con sentencias T-SQL; de hecho, llegará un momento en que tu experiencia será tan profunda que te resultará más sencillo realizar gran parte de las operaciones mediante sentencias T-SQL. En concreto, las palabras clave para definir este tipo de sentencias son ALTER TABLE, CREATE TABLE, CONSTRAINT, FOREIGN KEY, PRIMARY KEY.

9.3. Otras restricciones (UNIQUE, CHEK, DEFAULT)

Además, existen restricciones que "acotan", limitan, o establecen el valor de una columna en ciertas condiciones. Se llaman restricciones (CONSTRAINTS), y forman parte del estándar SQL-99. Estas restricciones que vamos a ver son: restricción UNIQUE, restricción CHECK, y restricción DEFAULT.

Restricción UNIQUE

La restricción UNIQUE establece que el valor de cada columna de una fila sea único, Por ejemplo, en la tabla clientes podemos tener una clave primaria como ID, y además tener una columna NIF que establecemos que sea única: lo que internamente implementa SQL Server, es que cada vez que se intente hacer una modificación, o inserción de un valor para esa columna, antes de realizar la operación, se asegura que el nuevo/modificado valor es único en el conjunto de filas de la tabla.

La restricción UNIQUE se implementa en T-SQL con la palabra clave UNIQUE; por ejemplo, si queremos que la columna Nombre de la tabla Clientes sea única, podríamos ejecutar el siguiente código T-SQL:

ALTER TABLE dbo.Clientes

(35)

Material cofinanciado con fondos Comunitarios del Fondo Social Europeo, a través del Programa Operativo Plurirregional de Adaptabilidad y Empleo 2007ES05UPO001, para el periodo 2007-2013, con un porcentaje de cofinanciación del 80%.

Restricción CHECK

La restricción CHECK establece que el valor de la columna se ajuste a ciertas condiciones. Se define para limitar el valor que pueda tener la columna; por ejemplo, se puede definir que la columna Importe sea de un valor positivo mayor que cero. SQL Server, se encargará de "validar" el valor que tendrá la columna cuando se intente hacer una modificación, o inserción de un valor para esa columna. En caso de que el valor no cumpla la restricción, se generará una excepción y se cancelará la operación en curso. La restricción CHECK se implementa en T-SQL con la palabra clave CHECK; por ejemplo, si queremos que la columna Cantidad de la tabla Pedidos sea un valor mayor que cero, podríamos ejecutar el siguiente código T-SQL:

ALTER TABLE dbo.Pedidos

ADD CONSTRAINT RestriccionCantidad CHECK (Cantidad>0).

Restricción DEFAULT

La restricción DEFAULT establece el valor para una columna cuando no se ha especificado valor en la sentencia de inserción. SQL Server, comprobará si la sentencia de inserción establece un valor para la columna, y en caso negativo, establecerá el valor por defecto.

La restricción DEFAULT se implementa en T-SQL con la palabra clave DEFAULT; por ejemplo, si queremos añadir una columna Importe a la tabla Pedidos, y su valor por defecto sea cero, podríamos ejecutar el siguiente código T-SQL:

ALTER TABLE dbo.Pedidos ADD Importe DEFAULT (0).

10.

Creación de índices

Los índices son "estructuras" alternativa a la organización de los datos en una tabla. El propósito de los índices es acelerar el acceso a los datos mediante operaciones físicas más rápidas y efectivas. Para entender mejor la importancia de un índice pongamos un ejemplo; imagínate que tienes delante las páginas amarillas, y deseas buscar el teléfono de Manuel Salazar que vive en Alicante. Lo que harás será buscar en ese pesado libro la población Alicante, y guiándote por la cabecera de las páginas buscarás los apellidos que empiezan por S de Salazar. De esa forma localizarás más rápido el apellido Salazar. Pues bien, enhorabuena, has estado usando un índice.

Pues el objetivo de definir índices en SQL Server es exactamente para conseguir el mismo objetivo: acceder más rápido a los datos. Además SQL Server tiene dos tipos de índices que analizaremos a continuación.

(36)

Índices agrupados

Los índices agrupados, definen el orden en que almacenan las filas de la tabla (nodos hoja/página de datos de la imagen anterior). La clave del índice agrupado es el elemento clave para esta ordenación; el índice agrupado se implementa como una estructura de árbol b que ayuda a que la recuperación de las filas a partir de los valores de las claves del índice agrupado sea más rápida. Las páginas de cada nivel del índice, incluidas las páginas de datos del nivel hoja, se vinculan en una lista con vínculos dobles. Además, el desplazamiento de un nivel a otro se produce recorriendo los valores de claves.

Consideraciones para usar índices agrupados Columnas selectivas

Columnas afectadas en consultas de rangos: BETWEEN, mayor que, menor que, etc. Columnas accedidas "secuencialmente"

Columnas implicadas en JOIN, GROUP BY Acceso muy rápido a filas: lookups

(37)

Material cofinanciado con fondos Comunitarios del Fondo Social Europeo, a través del Programa Operativo Plurirregional de Adaptabilidad y Empleo 2007ES05UPO001, para el periodo 2007-2013, con un porcentaje de cofinanciación del 80%.

Índices no-agrupados

Los índices no agrupados tienen la misma estructura de árbol b que los índices agrupados, con algunos matices; como hemos visto antes, en los índices agrupados, en el último nivel del índice (nivel de hoja) están los datos; en los índices no-agrupados, en el nivel de hoja del índice, hay un puntero a la localización física de la fila correspondiente en el índice agrupado. Además, la ordenación de las filas del índice está construida en base a la(s) columna(s) indexadas, lo cual no quiere decir (a diferencia de los índices agrupados), que la organización física de las páginas de datos corresponda con el índice.

Consideraciones para usar índices agrupados Columnas con datos muy selectivos Consultas que no devuelven muchas filas. Columnas en WHERE.

Evitar acceso a páginas de datos realizando el acceso sólo por el índice. Covered queries (consultas cubiertas).

En SQL Server 2005, son nuevos los índices INCLUDE que son índices no- agrupados que en el nivel de hoja del índice (donde está el puntero al índice agrupado), se puede incluir más columnas; el objetivo de este nuevo tipo de índices es beneficiar el uso de las consultar cubiertas para evitar que se acceda a la página de datos del índice agrupado.

(38)

11.

Consultas de Selección

En esta lección veremos mecanismos para recuperar información de la base de datos. Veremos como elegir las columnas de las tablas a recuperar, y cómo aplicar distintos tipos de cláusulas como WHERE, JOIN, GROUP BY, y TOP. Además veremos dos novedades de la versión 2005 de SQL Server: funciones de Ranking, en las que se devuelve la posición relativa de las filas respecto al conjunto total, y Expresiones de tablas comunes que son una nueva funcionalidad para implementar consultas de una forma si cabe más sencilla, y a la ver aporta la posibilidad de realizar consultas recursivas que hasta la versión 2000 no era posible.

11.1.Selección de columnas y cláusula FROM

Usando la cláusula FROM identificamos cuales son las tablas, vistas, funciones, tablas derivadas o expresiones de tablas comunes que se utilizan en la instrucción SELECT.

A su vez, se deberá indicar las columnas a recuperar de la consulta. Si se quiere recuperar todas las columnas se puede usar el comodín * (asterisco), aunque deberemos ser cuidadosos con ello.

Como recomendación, deberás intentar ser lo más selectivo posible en las columnas a incluir en la cláusula SELECT. ¿Por qué razón? ¿Recuerdas la estructura de los índices? Si deseamos todas las columnas de una tabla, estaremos "forzando" a SQL Server a acceder al nivel de datos de las páginas (recuerda: abajo del todo), y estaremos limitando la efectividad de los índices diseñados en las tablas.

El contrapunto de éste comentario es la parte de desarrollo, si generamos código "genérico" que recupera todas las columnas porque las columnas serán necesarias unas veces si y otras no, estaremos penalizando el rendimiento del servidor SQL Server Express pero estaremos ganando tiempo de desarrollo...

Para ejecutar una consulta desde SQL Server 2005 Management Studio Express, conectaremos a la base de datos PedidosDB, desde una de las opciones marcada en la siguiente imagen en recuadro rojo:

(39)

Material cofinanciado con fondos Comunitarios del Fondo Social Europeo, a través del Programa Operativo Plurirregional de Adaptabilidad y Empleo 2007ES05UPO001, para el periodo 2007-2013, con un porcentaje de cofinanciación del 80%.

A continuación deberás escribir el siguiente texto para rellenar unas cuantas filas en la tabla clientes (veremos luego la sentencia INSERT):

INSERT Clientes SELECT 'Julia Herrera', 'Alicante'; INSERT Clientes SELECT 'Javier Álvarez', 'Madrid';

Para ello, copia el texto en la ventana de texto, y pulsa F5, o el botón Execute para ejecutar la sentencia.

Borra el texto de la sentencia, y escribe el siguiente texto: SELECT Id AS Identificador, Nombre FROM Clientes;

Ejecuta la instrucción y verás como resultado todas las filas de la tabla Clientes. Fíjate que la columna de base de datos Id, ahora parece que se llama Identificador. Esto es un alias de columna; habrá ocasiones en las que necesites personalizar el nombre de columna que se muestra.

Desde Management Studio, también se puede ver la información de la tabla de forma similar a como se presenta en Access; para ello, deberás seleccionar la tabla que quieres editar, botón derecho del ratón, y elegir la opción "Open Table" como aparece en la siguiente imagen:

(40)

Y como resultado tendremos:

Deberás tener cuidado con abrir tablas muy grandes, porque el proceso de carga es más costoso cuanto mayor sea el tamaño de la tabla. Sin embargo, en la versión 2005 de las herramientas administrativas, tenemos la posibilidad de cancelar consultas mientras se está realizando la petición; fíjate en el botón marcado en color rojo en la siguiente imagen; pulsando dicho botón se solicita al servidor que se cancele la consulta.

(41)

Material cofinanciado con fondos Comunitarios del Fondo Social Europeo, a través del Programa Operativo Plurirregional de Adaptabilidad y Empleo 2007ES05UPO001, para el periodo 2007-2013, con un porcentaje de cofinanciación del 80%.

11.2.Cláusula WHERE

La cláusula WHERE se utiliza para aplicar filtros al conjunto de resultados; para ello existen operadores lógicos AND, OR, NOT, EXISTS con los condicionantes <, >, =, y BETWEEN. No hay límite para el número de condiciones a establecer. El orden de prioridad de los operadores lógicos es NOT, seguido de AND y OR. Se pueden utilizar paréntesis para suplantar esta prioridad en una condición de búsqueda. El orden de evaluación de los operadores lógicos puede variar dependiendo de las opciones elegidas por el optimizador de consultas

Para más información sobre los operadores lógicos, debes consulta la ayuda on- line del producto:

http://msdn2.microsoft.com/es-es/library/ms203721(sql.90).aspx

11.3.Cláusula JOIN

Cuando se necesita recuperar información de más de una tabla, se suele especificar cuales son las filas coincidentes entre ambas tablas (columnas Clave Ajena / Clave Primaria que vimos en la lección anterior). Para ello, hay una serie de operadores que condicionan dicho filtro.

INNER JOIN

Específica que se devuelvan todos los pares de filas coincidentes. Las filas no

coincidentes se descartan del resultado. Si no se especifica ningún tipo de combinación, éste es el tipo por defecto.

(42)

FULL [ OUTER ] JOIN

Especifica que una fila de la tabla de la derecha o de la izquierda, que no cumpla la

condición de combinación, se incluya en el conjunto de resultados y que las columnas que correspondan a la otra tabla se establezcan en NULL.

LEFT [ OUTER ] JOIN

Especifica que todas las filas de la tabla izquierda que no cumplan la condición de

combinación se incluyan en el conjunto de resultados, con las columnas de resultados de la otra tabla establecidas en NULL, además de todas las filas devueltas por la combinación interna.

RIGHT [OUTER] JOIN

Especifica que todas las filas de la tabla derecha que no cumplan la condición de

combinación se incluyan en el conjunto de resultados, con las columnas de resultados de la otra tabla establecidas en NULL, además de todas las filas devueltas por la combinación interna.

ON <search_condition>

Especifica la condición en la que se basa la combinación; se puede referenciar más de una columna, por ejemplo, tablas con claves primarias compuestas.

Un ejemplo de consulta podría ser el siguiente:

SELECT sh.SalesOrderID, sh.OrderDate, sh.CustomerID, sd.OrderQty, sd.ProductID, sd.UnitPrice

FROM Sales.SalesOrderHeader sh

INNER JOIN Sales.SalesOrderDetail sd ON sh.SalesOrderID = sd.SalesOrderID

11.4.Cláusula GROUP BY

El lenguaje T-SQL permite devolver la información agregada usando la cláusula GROUP BY; los condicionantes de la agregación se colocan después de la cláusula. Existen las siguientes funciones de agregado:

AVG, MIN, CHECKSUM, SUM, CHECKSUM_AGG, STDEV, COUNT, STDEVP, COUNT_BIG, VAR, GROUPING, VARP, MAX.

Por ejemplo, la siguiente sentencia T-SQL devolvería la cantidad de productos pedidos por cliente en la base de datos MSDN:

SELECT Id, COUNT(*) AS Cantidad FROM Pedidos

(43)

Material cofinanciado con fondos Comunitarios del Fondo Social Europeo, a través del Programa Operativo Plurirregional de Adaptabilidad y Empleo 2007ES05UPO001, para el periodo 2007-2013, con un porcentaje de cofinanciación del 80%.

En SQL Server 2005, se pueden diseñar funciones de agregado personalizadas con lenguajes .NET como Visual Basic o C#; para ello deberá implementar el método de agregación siguiendo unas "reglas" que define SQL Server

(interfaces, método de acumulación, funciones varias, etc.), compilarlo, incluirlo

en la base de datos con la sentencia (CREATE ASSEMBLY), y hacerlo referencia con la función T-SQL CREATE AGGREGATE.

11.5.Cláusula TOP (n) [PERCENT]

Cuando se necesita recuperar los n primeros elementos que cumplen una condición, se puede utilizar la función TOP. La función TOP tiene un argumento que puede representar un número o un porcentaje.

La única forma de garantizar que la sentencia TOP devuelva los n primeros elementos que cumplen una condición es usando la cláusula ORDER BY. Además, SQL Server 2005, incorpora nuevas funciones de RANKING que devuelven posiciones relativas de las filas; las funciones son RANK, DENSERANK, TILE , y NTILE.

11.6.Expresiones de tablas comunes (CTE)

Las expresiones de tablas comunes son una de las novedades en el lenguage T-SQL en la versión 2005; representan un conjunto temporal de datos, al que se puede hacer referencia varias veces en la sentencia en la que está incluida. Su ámbito es la sentencia en la que se ejecuta, y puede utilizarse en sentencias SELECT, INSERT, UPDATE, y DELETE. Además, también puede ser incluida en procedimientos almacenados, y en la definición de vistas. Su sintaxis es: [ WITH <common_table_expression> [ ,...n ] ] <common_table_expression> ::= expression_name [ ( column_name [ ,...n ] ) ] AS ( CTE_query_definition )

Aprovechando la consulta anterior, un ejemplo de CTE podría ser el siguiente: WITH PedidosAgrupados (Id, Cantidad) AS (SELECT Id, COUNT(*) AS Cantidad

FROM Pedidos GROUP BY Id) SELECT Id, Nombre

FROM Clientes

(44)

11.7.Consultas de modificación 11.7.1.Sentencia INSERT

La sentencia INSERT, inserta filas en una tabla; tiene dos formatos: INSERT INTO <tabla> VALUES ( <lista de columnas> )

En la que se insertan la lista de valores en una tabla; corresponde a una inserción de una fila en la tabla.

INSERT INTO <tabla> <sentencia select>

Donde la sentencia select será un conjunto de filas que se insertará en la tabla destino.

Cuando una de las columnas de la tabla tenga establecida la propiedad IDENTITY, no será necesario especifica el valor de la columna porque SQL Server automáticamente lo hará por nosotros. En realidad, si se intenta insertar un valor, se generará una excepción porque la propiedad IDENTITY, no admite especificar valores para las columnas a menos que se use la opción SET IDENTITY_INSERT.

La sentencia INSERT se puede utilizar en combinación con las expresiones de tablas comunes; adicionalmente, existe una opción (OUTPUT), que devuelve Cuando una de las columnas de la tabla tenga establecida la propiedad IDENTITY, no será necesario especifica el valor de la columna porque SQL Server automáticamente lo hará por nosotros. En realidad, si se intenta insertar un valor, se generará una excepción porque la propiedad IDENTITY, no admite especificar valores para las columnas a menos que se use la opción SET IDENTITY_INSERT.

11.7.2.Sentencia UPDATE y DELETE

La sentencia UPDATE/DELETE, actualizan/borran filas de una tabla. Normalmente se le aplican filtros a la sentencia para que filtre las filas que se van a modificar. Se puede hacer la operación UPDATE/DELETE de dos formas, que explicaremos con un ejemplo:

DELETE Sales.SalesOrderDetail WHERE SalesOrderID = 3443

En el que se borran las filas de la tabla Sales.SalesOrderDetail cuyo identificador es el 3443.

(45)

Material cofinanciado con fondos Comunitarios del Fondo Social Europeo, a través del Programa Operativo Plurirregional de Adaptabilidad y Empleo 2007ES05UPO001, para el periodo 2007-2013, con un porcentaje de cofinanciación del 80%.

La otra posibilidad es hacer la operación con un JOIN (no todos los gestores de bases de datos lo permiten); el ejemplo sería el siguiente:

UPDATE t

SET AcumuladoImporte = t2.SumaImporte FROM TablaAcumulados t INNER JOIN (

SELECT Pedidos.Id, SUM (LineasPedido.Importe) AS SumaImporte FROM Pedidos JOIN LineasPedido

ON Pedidos.Id = LineasPedido.Id Pedidos.Fecha BETWEEN '20050101' AND '20060101'

GROUP BY Pedidos.Id ) t2

ON t.Id = t2.Id

WHERE Fecha BETWEEN '20050101' AND '20060101'

Para leer esta consulta es mejor que empieces por el final; mira la consulta que representa el alias t2: obtiene los en importe total de cada pedido del año 2005.

A continuación, ese resultado se va a cruzar (JOIN) con la tabla TablaAcumulados para actualizar la columna AcumuladoPedidos, reemplazandolo por el valor de SumaImporte de la consulta anterior. Antes de aplicarlo, deberá acotar la actualización a los pedidos realizados en el año 2005.

Las sentencias DELETE, y UPDATE también pueden usar la opción (OUTPUT), para devolver las filas afectadas por la operación. Puedes consultar los libros en pantalla on-line del producto en:

Referencias

Documento similar

En suma, los objetivos de la eva- luación son: Programar y ajustar la intervención a las necesidades, carencias y déficits de cada penado; iden- tificar las potenciales disfunciones

Para hacer efectivo el pago de los certificados de garantía de créditos que entren en mora por el vencimiento de una cuota de capital o intereses, la entidad financiera,

Además esta cartera de complementos de formación propios del Programa de Doc- torado se abrirá y ofertará, siempre que la condiciones del proceso docente lo permitan y asegurando que

Brindar atención médica y paramédica de calidad en materia de rehabilitación a los usuarios con algún tipo de discapacidad que así lo soliciten que les permita prepararse para

El Fondo Europeo de Desarrollo Regional (FEDER en adelante) y el Fondo Social Europeo (FSE en adelante), que subvencionan esta iniciativa, hablan así de ella: &#34;URB AN es la

- Tutorías y sistemas de evaluación continua. Permanentemente se apoya y evalúa al alumno con profesores-tutores y supuestos prácticos, con la ayuda de nuestra

Se valorará la presencia en el Grupo de OPP y asociaciones de pesca y acuicultura, entidades del sector extractivo (incluye a Cofradías de Pescadores), el sector transformador

Este proyecto está cofinanciado por el Servicio Canario de Empleo a través de una subvención directa de un total de 20.500€, actuación que se encuentra