Creación De Índices (L32) UNA TABLA PUEDE CONTENER VARIOS ÍNDICES SQL SERVER CREA AUTOMATICÁMENTE ÍNDICES ÚNICOS PARA ASEGURAR LOS CONSTRAINTS DE PRIMARY KEY Y UNIQUE EL ÍNDICE POR DEFECTO PARA LA CLAVE PRIMARIA, ES CLUSTERED SÓLO UN ÍNDICE CLUSTERED POR TABLA SE PUEDE EMPLEAR CREATE INDEX
Introducción Restricciones Sobre Índices (L32) SÓLO EL PROPIETARIO DE LA TABLA PUEDE CREAR LOS ÍNDICES UN SÓLO ÍNDICE CLUSTERED POR TABLA MÁXIMO NÚMERO DE NON-CLUSTERED, 249 MÁXIMO NÚMERO DE COLUMNAS POR ÍNDICE, 16 SE PUEDE EMPLEAR CREATE INDEX
Índices Compuestos (L32) UN ÍNDICE QUE UTILIZA MÁS DE UNA COLUMNA INCIDE EN LOS MECANISMOS DE PAGINACIÓN
Índices Sobre Vistas (L32) SE PUEDEN CREAR ÍNDICES SOBRE LAS VISTAS UNA VISTA INDEXADA REFLEJARA LOS CAMBIOS REALIZADOS EN LAS TABLAS BASES, DESPUÉS DE QUE EL ÍNDICE HA SIDO CREADO SE EMPLEN LAS INSTRUCCIONES CREATE VIEW, CREATE INDEX
Create Index (L33) CREATE [ UNIQUE ] [ CLUSTERED NONCLUSTERED ] INDEX index_name ON { table view } ( column [ ASC DESC ] [,...n ] ) [ WITH < index_option > [,...n] ] [ ON filegroup ] < index_option > :: = { PAD_INDEX FILLFACTOR = fillfactor IGNORE_DUP_KEY DROP_EXISTING STATISTICS_NORECOMPUTE SORT_IN_TEMPDB }
Rebuilding un Índice (L34) LOS ÍNDICES EN SQL SERVER SON ALMACENADOS EN MEMORIA PAGINADA. LAS PÁGINAS DE LOS ÍNDICES SON ENLAZADAS. CUANDO SE RECONSTRUYE UN ÍNDICE LA INFORMACIÓN DE LOS ÍNDICES (Y DE LOS DATOS EN EL CASO CLUSTERED ES REORGANIZADA PARA EVITAR FRAGMENTACIÓN) PARA HACER UN REBUILD SE PUEDE EMPLEAR EN CREATE INDEX (LO CUAL ES MÁS EFICIENTE QUE RECREAR EL ÍNDICE EN UN SÓLO PASO)
Rebuilding un Índice (L34) COMANDO DBCC DBREINDEX DBCC DBREINDEX ( basedatos.propietario.tabla' [, nombre_indice [, fillfactor ] ] ) [ WITH NO_INFOMSGS]
Eliminando Un Índice (L34) DROP INDEX <tabla.indice vista.indice>[,.] sp_helpindex <objeto> DEVUELVE INFORMACIÓN SOBRE LOS ÍNDICES DE LA TABLA USE sistemp IF EXISTS (SELECT name FROM sysindexes WHERE name = emp_ind') DROP INDEX empleado.emp_ind GO
Renombrando Un Índice (L34) sp_rename [ @nombreviejo = ] nombre_viejo', [ @nombrenuevo = ] 'nombre_nuevo' [, [ @tipoobjeto = ] tipo_objeto' ] TIPO OBJETO PUEDE SER COLUMN, DATABASE, INDEX, OBJECT, USERDATATYPE
Visualizando Los Índices (L34) sp_helpindex <objeto> <objeto> PUEDE SER CUALQUIER TABLA Y/O VISTA
Índices En Optimización De Consultas (L35) SQL SERVER OFRECER VARIOS MÉTODOS PARA MOSTRAR COMO SE REALIZA LA NAVEGACIÓN ENTRE TABLAS Y SE UTILIZAN LOS ÍNDICES PARA OBTENER LOS DATOS DE UNA CONSULTA SET SHOWPLAN_TEXT ON, DESPUÉS DE ESTE COMANDO EL PLAN DE EJECUCIÓN ES AUTOMÁTICAMENTE MOSTRADO SET SHOWPLAN_ALL ON, IGUAL QUE EL ANTERIOR PERO DE UNA MANERA MÁS CONCISA
Optimización Motor De Base De Datos (L36) SERVICIO INDEPENDIENTE DESDE SQL SERVER 2005 INTEGRADO CON XML PERMITE TRABAJAR CON MÚLTIPLES BASE DE DATOS BASADA EN PLANES DE EJECUCIÓN HERRAMIENTA INTERACTIVA
Mejores Prácticas (L37) APLICACIÓN GRATUITA DESCARGABLE DEL SITIO DE MICROSOFT CONJUNTO DE MEJORES PRÁCTICAS Y POLÍTICAS DETECTA POTENCIALES DESVIACIONES DESARROLLO EN.NET
Vistas (L39)
Vistas (L39) UNA VISTA ES UNA TABLA VIRTUAL CUYO CONTENIDO DEPENDE DEL RESULTADO DE UNA CONSULTA QUERY AL IGUAL QUE UNA TABLA CONTIENE UN CONJUNTO DE COLUMNAS Y DE REGISTROS A DIFERENCIA DE UNA VISTA LOS REGISTROS DE ÉSTA NO SE ALMACENAN FÍSICAMENTE EN LA BASE DE DATOS. ES ARMADA DINÁMICAMENTE CON LA INFORMACIÓN CONTENIDA EN LA TABLA MAESTRA, CUANDO LA VISTA ES REFERENCIADA
Ventajas De Las Vistas (L40) ACTÚA COMO UN FILTRO DE LOS REGISTROS DE LAS TABLAS REFERENCIADAS PUEDE AGRUPAR REGISTROS DE UNA O VARIAS TABLAS O DE UNA O VARIAS BASES DE DATOS CON EL USO DE CONSULTAS DISTRIBUIDAS ES POSIBLE MANTENER EN UNA VISTA DATOS DE BASES DE DATOS HETEROGÉNEAS NO EXISTEN RESTRICCIONES EN CUANTO A LOS TIPOS DE CONSULTA A REALIZAR EN UNA VISTA Y ALGUNAS PEQUEÑAS RESTRICCIONES DESDE EL PUNTO DE VISTA DE ACTUALIZACIÓN
Escenarios Para La Utilización De Vistas (L40) PARA CUSTOMIZAR LA PERCEPCIÓN DE LOS USUARIOS FINALES DE BASES DE DATOS PARA IMPLEMENTAR MECANISMOS DE SEGURIDAD, POR EJEMPLO ACCESO DE LECTURA A LAS VISTAS Y NINGÚN ACCESO A LAS TABLAS REFERENCIADAS EN LAS VISTAS PARA IMPORTAR/EXPORTAR DATOS ENTRE SERVIDORES SQL SERVER PARA PARTICIONAR DATOS (O FILTRAR)
Consideraciones Creación De Vistas (1/2) (L41) LAS VISTAS SE CREAN SOBRE LA BASE DE DATOS ACTUAL, SIN EMBARGO PUEDEN REFERIRSE A TABLAS O VISTAS DE OTRA BASE DE DATOS (INCLUSIVE DE OTROS SERVIDORES, EN EL CASO DE CONSULTAS DISTRIBUIDAS) SE PUEDEN CONSTRUIR VISTAS DE VISTAS. SQL SERVER EN GENERAL SOPORTA 32 NIVELES DE ANIDAMIENTO NO SE PUEDEN ASOCIAR REGLAS RULES NI PREDEFINIDOS DEFAULT A LAS VISTAS NO SE PUEDEN ASOCIAR AFTER TRIGGERS SINO INSTEAD OF TRIGGERS PARA LAS VISTAS
Consideraciones Creación De Vistas (2/2) (L41) LA CONSULTA ASOCIADA CON LA VISTA NO PUEDE INCLUIR LAS EXPRESIONES (ORDERBY, COMPUTE, COMPUTE BY, INTO) NO SE PUEDEN CREAR VISTAS TEMPORALES O VISTAS SOBRE TABLAS TEMPORALES SE PUEDEN CONSTRUIR VISTAS DE VISTAS. SQL SERVER EN GENERAL SOPORTA 32 NIVELES DE ANIDAMIENTO
Creación De Vistas (L41) CREATE VIEW [<propietario>. ] nombrevista [ ( columna [,...n ] ) ] [ WITH < atributovista > [,...n ] ] AS instruccion_select [ WITH CHECK OPTION ] < atributovista > ::= { ENCRYPTION SCHEMABINDING VIEW_METADATA }
Modificación De Datos A Través De Vistas (L42) INSERTANDO DATOS INSERT INTO nombrevista { [ ( listacolumnas ) ] { VALUES ( { DEFAULT NULL expression } [,...n] ) } }
Modificación De Datos A Través De Vistas (L42) LA VISTA DONDE SE VA A INSERTAR nombrevista deben ser updatable. Las modificaciones realizadas con la instrucción INSERT no pueden afectar a más de una de las tablas base (donde toman los datos las vistas) referenciadas por la claúsula FROM. EN EL CASO DE TENER UNA VISTA ACCEDIENDO A MÚLTIPLES TABLAS, LAS COLUMNAS DEL COMANDO INSERT DEBEN CORRESPONDER A UNA SOLA TABLA APLICA A LOS COMANDOS INSERT, UPDATE Y DELETE
Características Vistas Updatable (L42) LA INSTRUCCIÓN SELECT NO PUEDE TENER FUNCIONES AGREGADAS, Y NO CONTIENEN TOP, GROUP BY, UNION DISTINCT, VISTA DONDE SE VA A INSERTAR LA INSTRUCCIÓN SELECT NO CONTIENE COLUMNAS AGREGADAS (COLUMNAS CON OPERADORES Y EXPRESIONES) LA INSTRUCCIÓN FROM, REFERENCIA AL MENOS REFERENCIA UNA TABLA
Funciones Updatable (L42) INSTEAD OF TRIGGERS VISTAS PARTICIONADAS (VISTAS CONTENIENDO DATOS EN VARIOS SERVIDORES)
Eliminando Una Vista (L42) DROP VIEW <NOMBRE>
Optimizar Rendimientos Con Vistas (L43) CONSULTAS PRE-FABRICADAS ASOCIACIÓN DE ÍNDICES EN VISTAS ACTUALIZACIÓN INMEDIATA SOBRE LAS OPERACIONES DE INSERCIÓN
Introducción Stored-procedures (L44) PROCEDIMIENTOS ESCRITOS EN SQL-TRANSACT SE ALMACENAN COMO PARTE DE LA BASE DE DATOS SE ALMACENAN Y SE EJECUTAN EN EL SERVIDOR
Definición Stored-procedures (L44) UNA COLECCIÓN PRE-COMPILADA DE INSTRUCCIONES TRANSACT-SQL ALMACENADAS COMO UN OBJETO CON UN NOMBRE Y PROCESADA COMO UNA UNIDAD. SQL SERVER OFRECE UN CONJUNTO DE PROCEDIMIENTOS ALMACENADOS PARA SER UTILIZADOS COMO UTILITARIOS MOSTRANDO INFORMACIÓN DEL SISTEMA, SOBRE LAS BASES DE DATOS Y LOS USUARIOS LOS PROVISTOS POR SQL SE LLAMAN SYSTEM STORED- PROCEDURES
Características Stored-procedures (L44) SON SIMILARES A LOS PROCEDIMIENTOS DISPONIBLES EN OTROS LENGUAJES DE PROGRAMACIÓN PERMITEN PARÁMETROS DE ENTRADA DEVUELVEN MÚLTIPLES RESULTADOS A TRAVÉS DE PARÁMETROS DE SALIDA CONTIENEN INSTRUCCIONES DE PROGRAMACIÓN PARA ACCEDER A LAS BASES DE DATOS Y PUEDEN REALIZAR LLAMADAS A OTROS STORED-PROCEDURES RETORNAN UN VALOR DE STATUS PARA INDICAR EL ÉXITO O FRACASO DE LA EJECUCIÓN
Stored-procedures No Son Funciones (L44) NO PUEDEN SER UTILIZADOS COLOCANDO SU NOMBRE (COMO EL CASO DE LAS FUNCIONES, DONDE SE REALIZA LA SUSTITUCIÓN) NO RETORNAN VALORES
Beneficios Stored-procedures (L44) PERMITEN PROGRAMACIÓN MODULAR PERMITEN EJECUCIÓN RÁPIDA Y EFICIENTE REDUCEN EL TRÁFICO EN LA RED PUEDEN SER UTILIZADOS COMO MECANISMOS DE SEGURIDAD (NO DAR ACCESO A LAS TABLAS, SÓLO A LOS STORED PROCEDURES)
Estructura Stored-procedures (L44) SON CREADOS CON CREATE PROCEDURE Y MODIFICADOS CON ALTER PROCEDURE LA PRIMERA PARTE DEL STORED- PROCEDURE CONTIENE EL NOMBRE Y LOS PARÁMETROS DEL STORED-PROCEDURE LA SEGUNDA PARTE CONTIENE EL CÓDIGO EN TRANSACT DEL STORED-PROCEDURE LA TERCERA PARTE CONTIENE EL VALOR DEL STATUS RETORNADO
Operaciones Sobre Stored-procedures (L45) CREATE PROCEDURE <NOMBRE> AS <CODIGO> EXECUTE EXEC <NOMBRE> ALTER PROCEDURE INSTRUCCIONES, COMANDOS SQL DROP PROCEDURE
Detalles Sobre Stored-procedures (L45) EL COMANDO CREATE PROCEDURE NO PUEDE SER COMBINADO CON OTROS COMANDOS SQL EN UNA EJECUCIÓN BATCH EL STORED-PROCEDURE SE CREA EN LA BASE DE DATOS ACTUAL NI CONVIENE CREAR UN STORED_PROCEDURE CON EL NOMBRE SP_ COMO LOS DEL SISTEMA, YA QUE HARIA A QUE BUSCARA EN LAS BASES DE DATOS DEL SISTEMA SE PUEDEN CREAR STORED-PROCEDURE TEMPORALES CON #, ## (GLOBAL)COMO NOMBRE AL IGUAL QUE LAS TABLAS
Sintáxis Creación Stored-procedures (L45) CREATE PROC [ EDURE ] [ propietario. ] nombre [ ; numero ] [ { @parametro tipo } [ DEFAULT ] [ = valor defecto ] [ OUTPUT ] ] [,...n ] [ WITH { RECOMPILE ENCRYPTION RECOMPILE, ENCRYPTION } ] [ FOR REPLICATION ] AS instrucciontransact [...n ]
Procedimientos Almacenados Con Parámetros (L46) CREATE PROCEDURE <PROCEDIMIENTO> @<PAR1> <TIPO> AS < INSTRUCCIONES> CREATE PROC empldept @dept VARCHAR(12) AS SELECT * FROM Empleados WHERE coddpto = @dept EXEC <NOMBRE> <PARAMETRO> (Si es de tipo de salida, se debe especificar OUTPUT también en la llamada) EXEC empldept D001
Proc. Alm. Con Parámetros Defecto (L46) CREATE PROC <NOMBRE> @<PARAMETRO> <TIPO>= <VALOR> CREATE PROC empldept @dept VARCHAR(12) = d001
Proc. Alm. Parametros Por Referencia (L46) CREATE PROCEDURE <NOMBRE> @<PARAMETRO> <TIPO DATOS> OUTPUT AS <CUERPO PROCEDIMIENTO>
Proc. Alm. Variables Locales (L46) CREATE PROCEDURE Ejemplo @parent INT, AS @parsal INT OUTPUT -- Declara e inicializa una variable para almacenar el error DECLARE @ErrorNum INT -- Inicializa el error SET @ErrorNum = 0 -- almacena el error IF (@@ERROR <> 0) SET @ErrorNum = @@ERROR
Extended Stored-procedures (L47) PROCEDIMIENTOS ALMACENADOS ESCRITOS EN OTROS LENGUAJES, COMO POR EJEMPLO LENGUAJE C sp_addextendedproc [ @functname = ] 'procedimiento', [ @dllname = ] 'dll'
Mensajes De Error Personalizados (L48) CREATE PROCEDURE Ejemplo INSERT INTO -- Chequea el valor del error. IF @@ERROR <> 0 BEGIN PRINT Ocurrio un error de inserción " RETURN(99) END ELSE BEGIN PRINT Inserción exitosa RETURN(0) END
Mensajes De Error Personalizados (L48) RAISERROR ( { idmsg msg } {, severidad, estado } [, argumento [,...n ] ] ) [ WITH opcio [,...n ] ] idmsg > 50000, para evitar utilizar los del sistema msg (string formateado estilo lenguaje C) severidad debe ser indicado de 0 a 18 estado debe ser indicado de 0 a 128
Errores En SQL Server (L48) LOS ERRORES EN SQL SERVER TIENEN VARIOS ATRIBUTOS EL ID DELERROR EL MENSAJE DEL ERROR LA SEVERIDAD DEL ERROR EL ESTADO DEL ERROR EL NOMBRE DEL STORED PROCEDURE EL NÙMERO DE LÌNEA
Funciones Definidas Por El Usuario (L49) INTRODUCIDO A PARTIR DE SQL 2000 REUTILIZACION DE FUNCIONES DE CONSULTA UNA VEZ DEFINIDA SE UTILIZA COMO FUNCION DE SQL TRES TIPOS DE FUNCIONES: ESCALARES TABLA EN LINEA TABLA DE MULTI SENTENCIAS
Crear y Alterar Funciones Definidas Por El Usuario (L50) CONSTRUCTOR CREATE FUNCTION CONSTRUCTOR ALTER FUNCTION FUNCTIONS SON TRATADOS COMO OBJETOS DE LA BASE DE DATOS
Funciones Escalares (L51) DEVUELVEN UN VALOR ESCALAR (int, money,varchar,real) CREATE FUNCTION [propietario.] nombre_funcion ( [{ @nombrepar tipo [ = defecto]} [,..n]]) RETURNS tipo [WITH <opcion> >::={SCHEMABINDING ENCRYPTION] [AS] BEGIN... RETURN expresion_escalar END
Ejemplo Funciones Escalares (L51) CREATE FUNCTION dbo.cubo( @numero float) RETURNS float AS BEGIN RETURN(@numero * @numero * @numero) END
Funciones De Tabla En Linea (L51) DEVUELVEN LA SALIDAD DE UN SELECT (UNA TABLA) LA SALIDA SE UTILIZA EN JOINS O CONSULTAS COMO UNA TABLA STANDARD CREATE FUNCTION [propietario.] nombrefuncion ( [{ @parametro tipo [ = defecto]} [,..n]]) RETURNS TABLE [WITH <option>::={schemabinding ENCRYPTION}] RETURN [(] instrucción select [)]
Ejemplo Funciones De Tabla En Linea (L51) CREATE FUNCTION dbo.librosportema(@tema char(2) ) RETURNS TABLE AS RETURN (SELECT * FROM Libros WHERE tema = @tema)
Funciones De Tabla De Multisentencias (L51) SIMILARES A PROCEDIMIENTOS ALMACENADOS PROCESAMIENTO ELABORADO INVOLUCRANDO VARIAS TABLAS DEVUELVEN EL RESULTADO DE UN PROCESAMIENTO COMPLICADO EN UNA TABLA CREATE FUNCTION [propietario.] nombrefuncion ( [{ @parametro tipo [ = defecto]} [,..n]]) RETURNS TABLE [WITH <opcion> >::={SCHEMABINDING ENCRYPTION] [AS] BEGIN CODIGO FUNCION RETURN END