http://www.desarrolladoras.org.ar
SQL SERVER 2008Para desarrolladores
http://www.desarrolladoras.org.ar
SQL SERVER 2008
Gabriela Marina GilesMCT – MCTS
Instructor Senior .NET
Oradora Regional de INETALatam
Líder y co-fundadora del Grupo desarrollador@s
Para desarrolladores
http://www.desarrolladoras.org.ar
¿Que es SQL Server?
¿Que es SQL?
¿Qué es Transact-SQL?
http://www.desarrolladoras.org.ar
Bases de Datos
• Sistema:
– Master
– Model
– TemDB
– MSDB
• Usuarios:
– AdventureWorks
– NorthWind(2000)
– Otras
http://www.desarrolladoras.org.ar
SQL es agrupado en 3
categorías:
1. DDL - Data Definition Language
2. DCL - Data Control Language
3. DML - Data Manipulation Language
http://www.desarrolladoras.org.ar
Data Definition Language
• CREATE
• ALTER
• DROP
• EJEMPLO:
CREATE TABLE / CREATE PROC / CREATE
VIEW
http://www.desarrolladoras.org.ar
Los permisos para
sentencias DDL
• Pertenecer al roles:
– Sysadmin (servidor)
– Dbcreator (servidor) y db_owner (Base de datos)
– db_ddladmin (Base de datos).
http://www.desarrolladoras.org.ar
DEMO DDL
http://www.desarrolladoras.org.ar
Los 4 nombres
• SQL Server 2000
– Servidor.base.propietario.objeto
• SQL Server 2005-2008
– Servidor.base.esquema.objeto
Ver esquemas de AdventureWorks
http://www.desarrolladoras.org.ar
Data Control Language
• GRANT
• DENY
• REVOKE
• Los permisos para poder ejecutar estas
sentencias son, pertenecer al grupo
sysadmin o dbcreator y db_owner o
db_securityadmin
http://www.desarrolladoras.org.ar
DEMO DCL
http://www.desarrolladoras.org.ar
Data Manipulation Language
• INSERT
• UPDATE
• DELETE
• SELECT
http://www.desarrolladoras.org.ar
INSERT
• Nueva sintaxis para cláusula VALUES
– Ahora devuelve una tabla relacional con
múltiples filas
• Uso con la sentencia INSERT
– Para insertar múltiples filas como
operación unica.
http://www.desarrolladoras.org.ar
DEMO INSERT - UPDATE
http://www.desarrolladoras.org.ar
Tipos de datos
Los tipos de datos de SQL Server se organizan en
las siguientes categorías:
Numéricos exactos Cadenas de caracteres Unicode
Numéricos aproximados Cadenas binarias
Fecha y hora Otros tipos de datos
Cadenas de caracteres
ms-
help://MS.SQLCC.v10/MS.SQLSVR.v10.es/s10de_1devconc/html
/63de7291-e226-45cd-9526-6b11b7c3c3f2.htm
http://www.desarrolladoras.org.ar
Nuevos Tipos de datos
• DATE
– Almacena solamente fechas, sin la
porción de tiempo.
– Rango ampliado de fechas:
• Enero 01, 0001 – Diciembre 31, 9999
– 3 Bytes de espacio
http://www.desarrolladoras.org.ar
Nuevos Tipos de datos• TIME
– Almacena solamente tiempo, sin la porción de
fecha.
– Rango ampliado de fracción de segundos
(hasta nanosegundos):
• 00:00:00.0000000 – 23:59:59.9999999
– 3 - 5 Bytes de espacio (dependiendo de la
precisión).
– No es dependiente de la zona horaria (GMT).
http://www.desarrolladoras.org.ar
Nuevos Tipos de datos
• DATETIME2– Rango ampliado de fecha y fracción de segundos:
• Enero 01, 0001 – Diciembre 31, 9999
• 00:00:00.0000000 – 23:59:59.9999999
– 6 - 8 Bytes de espacio (dependiendo de la precisión).
– Hay nuevas funciones del sistema que retornan valores DATETIME2:
• SYSDATETIME()
• SYSUTCDATETIME()
– Nuevos argumentos para DATEPART y DATEDIFF:
• MICROSECOND (MCS)
• NANOSECOND (NS)
– No es dependiente de la zona horaria (GMT).
http://www.desarrolladoras.org.ar
Nuevos Tipos de datos
• DATETIMEOFFSET
– Contiene todas las características de DATETIME2:
• Enero 01, 0001 – Diciembre 31, 9999
• 00:00:00.0000000 – 23:59:59.9999999 +- 14:00
– DIFERENCIAS:
• 8 - 10 Bytes de espacio (dependiendo de la precisión).
• Hay nuevas funciones del sistema:
– SYSDATETIMEOFFSET()
– SWITCHOFFSET()
– TODATETIMEOFFSET()
– DATENAME(TZOffset, <value>)
– Dependiente de la zona horaria (GMT).
• Se puede almacenar el tiempo local y hacer reportes usando UTC sin realizar cambios al esquema.
http://www.desarrolladoras.org.ar
Demos Tipos de datos
http://www.desarrolladoras.org.ar
Variables
• Las variables se declaran con un @
delante del nombre.
– DECLARE @city varchar(50)
• Se pueden modificar las variables y
parametros con SET o SELECT
– DECLARE @city varchar(50)
– SET @city=‘Quilmes’
– SELECT @city
http://www.desarrolladoras.org.ar
Inicialización y asignación de
variables • Una pequeña mejora introduce SQL Server 2008 al lenguaje T-SQL
respecto de la inicialización y asignación de variables. :
declare@fecha datetime = getdate(),@edad int = 33,@nombre varchar(100) = ‘gaby';
-- Muestro los valores...select @fecha, @edad, @nombre
En versiones anteriores hubiésemos obtenido el siguiente error de sintaxis:
Msg 139, Level 15, State 1, Line 0Cannot assign a default value to a local variable.
DEMO Inicialización y asignación de variables
http://www.desarrolladoras.org.ar
Stored Procedures
Código escrito en T-SQL, compilado y
almacenado en el SQL Server
http://www.desarrolladoras.org.ar
Seguridad por encriptación
Por qué ?
Performance frente a recompilaciones
constantes
Centralización del código
Seguridad por derechos de ejecución
Stored Procedures
http://www.desarrolladoras.org.ar
Stored Procedures
• Definidos por el usuario
• Los de sistema
http://www.desarrolladoras.org.ar
Stored Procedures
Operaciones posibles
Crear
Eliminar
Modificar
CREATE PROCEDURE
ALTER PROCEDURE
DROP PROCEDURE
http://www.desarrolladoras.org.ar
Parametros
• INPUT
• OUTPUT
• RETURN VALUE
http://www.desarrolladoras.org.ar
DEMO SP
http://www.desarrolladoras.org.ar
Valores Tipo “Tabla” como
Parámetros• Escenarios
– Actualización en lotes del servidor
– Parámetros en lotes para usar en una
consulta
– Migración de base de datos
– Pasar una tabla entre rutinas
• Criterio común
– Gran cantidad de datos pasados del cliente al
servidor
http://www.desarrolladoras.org.ar
Valores Tipo “Tabla” como
Parámetros• Tipo de tabla definida por el usuario
– Nuevo tipo definido por el usuario
– Sintaxis basada en Create Type
– Se pueden definir índices y restricciones
– Nueva vista de catalogo para tipos de datos
tablas. Sys.Tables_Types
http://www.desarrolladoras.org.ar
Valores Tipo “Tabla” como
Parámetros
http://www.desarrolladoras.org.ar
Valores Tipo “Tabla” como
Parámetros• Rendimiento
– Se puede especificar un ordenamiento y clave única
– Evita la re compilación de la sentencia
– No necesita de un bloqueo desde el cliente para inicializar los valores de la tabla.
– Reducción de idas y vueltas al servidor
– Operaciones basadas en conjunto
– Transporte de datos eficiente
http://www.desarrolladoras.org.ar
DEMO PARAMETRO TABLA
http://www.desarrolladoras.org.ar
Merge
• Permite procesar múltiples cambios en una sola instrucción
• Sintáxis:
MERGE <target>
USING <source>
ON (<joincondition>)
WHEN MATCHED [AND…] THEN…
WHEN NOT MATCHED THEN…
WHEN SOURCE NOT MATCHED THEN…
http://www.desarrolladoras.org.ar
Merge
MERGE dbo.Tabla1 AS TargetUSING (SELECT ID,Campo1,Campo2,Campo3 FROM dbo.Tabla2) AS SourceON (Target.ID = Source.ID)WHEN MATCHED THEN
UPDATESET Target.Campo1 = Source.Campo1, Target.Campo2 = Source.Campo2
WHEN NOT MATCHED BY TARGET THEN
INSERT (ID,Campo1,Campo2,Campo3)VALUES (Source.ID,Source.Campo1,Source.Campo2, Source.Campo3)
WHEN NOT MATCHED BY SOURCE THEN
DELETE;
http://www.desarrolladoras.org.ar
Capturar salida:
• Clausula OUTPUT que permite capturar todo lo que sucedió dentro de una operación INSERT/DELETE/UPDATE.
• En SQL Server 2008 el uso conjunto de MERGE + OUTPUT nos sirve saber que registros fueron modificados y que acción se hizo sobre ese registro (INSERT, UPDATE o DELETE).
• La nueva función $action indica que operación se realizó, mientras que los atributos deleted e inserted guardan la información sobre el registro afectado (de la misma manera que funcionan con los triggers).
http://www.desarrolladoras.org.ar
MERGE dbo.Tabla1 AS TargetUSING (SELECT ID,Campo1,Campo2,Campo3 FROM dbo.Tabla2) AS SourceON (Target.ID = Source.ID)WHEN MATCHED THEN
UPDATE SET Target.Campo1 = Source.Campo1, Target.Campo2 = Source.Campo2
WHEN NOT MATCHED BY TARGET THEN
INSERT (ID,Campo1,Campo2,Campo3)VALUES (Source.ID,Source.Campo1,Source.Campo2, Source.Campo3)
WHEN NOT MATCHED BY SOURCE THEN
DELETE
OUTPUT $action, deleted.*, inserted.*;
Resultado:
http://www.desarrolladoras.org.ar
DEMO MERGE
http://www.desarrolladoras.org.ar
Tipo de datos FileStream
• Algunas de las características de este nuevo tipo de datos son:
• Almacena grandes ficheros de datos binarios no estructurados directamente
en un sistema de ficheros NTFS: documentos, imágenes, etc.
• Se preserva el control por parte de la BD y la consistencia transaccional.
• Un ejemplo de uso de FILESTREAM es la posibilidad de controlar mediante la base de datos una carpeta de archivos de vídeo.
http://www.desarrolladoras.org.ar
características de FILESTREAM
• Es un atributo de una columna varbinary(max).
• Especifica que la columna se ha de almacenar en el sistema de ficheros NTFS: – La columna sigue siendo manejable mediante comandos T-SQL.
– Se puede acceder desde el sistema de ficheros y desde la API del SO.
• Se implementa como una columna varbinary(max) en la que los datos son guardados como BLOBs en el sistema de ficheros: – EL tamaño máximo de los BLOBs viene limitado únicamente por
el tamaño del volumen de almacenamiento.
– La limitación estándar de los tipos varbinary(max) de 2 GB no se aplican a estos BLOBs que se almacenan en el sistema de ficheros.
http://www.desarrolladoras.org.ar
¿Cuándo es recomendable
utilizar el tipo de datos
FILESTREAM?
• Se necesita almacenar objetos que
ocupan como media más de 1 MB.
• Es importante el acceso rápido en modo
lectura.
http://www.desarrolladoras.org.ar
DEMO
http://www.desarrolladoras.org.ar
LINQ
• El Lenguaje de Consultas Integrado LINQ, nos permite realizar consultas a una fuente de datos utilizando lenguajes de programación manejados tales como Visual Basic.NET o C#, en lugar de usar sentencias SQL.
• Utilizaremos una sintaxis consistente para obtener datos de diversas fuentes de datos, incluyendo datos relacionales, entidades, XML, DataSets de ADO.NET, y colecciones de objetos en memoria. Esta nueva sintaxis embebida en un lenguaje de propósito general adquiere todos sus beneficios: validación de tipos, revisión de errores al momento de la codificación, etc.
http://www.desarrolladoras.org.ar
Para otra presentación
• Más de tipos de datos:
– Soporte para datos Espaciales (geográficos /
geométricos)
• LinQ
• Mejoras en XML
• Framework Sincronización para aplicaciones
offline/cache
http://www.desarrolladoras.org.ar
Gabriela Marina GilesMCT – MCTS
Instructor Senior .NET
Oradora Regional de INETALatam
Líder y co-fundadora del Grupo desarrollador@s
?Gracias!