sábado, 5 de julio de 2014

SQL SERVER 2008 CREAR BASE DE DATOS DESDE 0

Aprenda a crear bases de datos en SQL Server 2008.


Nota: Sólo aplica para servidores con OS Windows Server 2008

Conocimientos previos necesarios:
ESTE ARTICULO CONTIENE INFORMACIÓN QUE DEBE SER HECHA ÚNICAMENTE POR USUARIOS EXPERIMENTADOS PARA EVITAR AFECTAR A SU SERVIDOR.

Existen 3 tipos de archivos que usan para almacenar una base de datos:
  • Archivos principales: Estos archivos contienen la información de inicio para la base de datos, se utiliza también para almacenar datos y cada base de datos tiene un único archivo principal.
  • Archivos secundarios: Contienen todos los datos que no caben en el archivo principal, no es necesario que tengan archivos secundarios si el principal es lo suficientemente grande, pero si la base de datos fuera muy extensa se pueden utilizar archivos secundarios en otras unidades de disco de modo que se distribuyan en varias unidades o discos removibles.
  • Archivos de transacciones: Estos archivos contienen la información de registro que se utilizar para recuperar la base de datos, debe haber al menos un archivo de este tipo aunque puede haber más de uno, su tamaño mínimo es de 512 kb y es el archivo Log.

    Se explicarán de forma breve dos métodos para crear bases de datos en SQL Server.
    MÉTODO 1
    1.- Abra el programa SQL Server Management Studio usando autenticación Windows.

    sql-server-management.jpg


    2.- Al abrir el árbol de carpetas busque DataBases y de click derecho seleccionando New Database…

    new-database.jpg


    3.- Se abrirá el menú de diálogo, registre un nombre para la base de datos en este caso será DB_EJEMPLO

    nombre-base-de-datos.jpg


    4.- Podrá ver que el Logical Name se irá llenando a la vez que se va escribiendo el nombre.

    En las siguientes pestañas podrá ver: 
    • File Type: Si se trata de Rows Data o un archivo Log
    • Filegroup: Si es primario, secundario o un log
    • Initial Size: Muestra el tamaño inicial que tendrá tu base de datos (está en MegaBytes).
    • Autogrowth o crecimiento automático: El tamaño hasta donde se puede agrandar la base de datos y en la medida que esta irá creciendo. Por defecto es indefinida y crecerá mientras tenga espacio en disco, también se puede definir un tamaño máximo dando click en los puntos suspensivos   
    • Path o ruta: Donde se van a guardar sus archivos, también podrá cambiarla de ubicación.

    -----------------------------------------

    MÉTODO 2
    Mediante Query. Mucha gente recomienda crear la base de datos mediante una consulta quizás para tener en cuenta con más detalle el tamaño máximo y otras características, pero cualquiera que sea el caso así pordrá hacerlo:

    1.- Primero debe crear una nueva hoja de consulta, haciendo click a New Query en la parte superior.

    2.- Posteriormente ahí escriba el siguiente código:

    CREATE DATABASE DB_EJEMPLO2
     ON
     ( NAME =  DB_EJEMPLO2_data,
     FILENAME = 'D:\BASES DE DATOS\DB_EJEMPLO2.mdf',
     SIZE = 4,
     MAXSIZE = 10,
     FILEGROWTH = 1 )
     GO

    Notas: 
    • Tomar en cuenta que cuando se crea una base de datos se crean dos archivos, un archivo *.mdf que contiene el archivo data y un archivo  *.ldf que contiene al archivo log, el archivo *.mdf es el archivo primario, mediante el código mostrado que se ha creado en la base de datos donde especifica las características del archivo *.mdfmientras que el archivo log al no haberse especificado se creará automáticamente con un tamaño de 1 Mb.
    • NAME es el nombre del archivo data (puede que no sea el mismo que la base de datos pero se recomienda que así sea con la terminación data). 
    • FILENAME es la ruta del archivo mdf.  
    • SIZE es el tamaño inicial de su base de datos.
    • MAXSIZE es su tamaño máximo
    • FILEGROWTH determina el tamaño o la proporción en la que crecerá el archivo principal
    • Todos estos tamaños están representados en Megabytes por defecto pero uno podría especificar si quiere que sea en otra unidad (Kb, Mb, Gb, TB, también Unlimited -en el caso de Maxsize- y N% -en el caso de FileGrowth) 

    3.- Finalmente así deberá quedar.

    ejemplo-base-de-datos-sql.jpg

    <p><a href='http://www.anuntiomatic.com?patrocinador=jromero81' target='_blank'><img src='http://www.anuntiomatic.com/images/banners/468oportunidad.gif' alt='Oportunidad de Trabajo desde Casa Gratis' width='468' height='60' border='0'/></a>


    SQL SERVER 2005 0 2000 CONEXION A UN SERVIDOR REMOTO

    Aprenda a cómo conectarse a un servidor SQL Server 2000 o 2005.



    Conocimientos previos necesarios:
    ESTE ARTICULO CONTIENE INFORMACIÓN QUE DEBE SER HECHA ÚNICAMENTE POR USUARIOS EXPERIMENTADOS PARA EVITAR AFECTAR A SU SERVIDOR.

    1.- De click en el menú Start o Inicio, vaya a All Programs o Todos los programas,  seleccione Microsoft SQL Server y finalmente en Enterprise Manager

    enterprise-manager-sql.jpg


    2.- A continuación se mostrará la pantalla de SQL Server Enterprise Manager, en el apartado SQL Server Group de click en el botón derecho del mouse y posteriormente sobre New SQL Server Registration...

    new-sql-server-registration.jpg

    3.- Iniciará el Asistente de registro, de click en el botón Next.

    asistente-de-registro-sql.jpg


    4.-En la casilla Available Servers escriba el nombre del servidor, posteriormente de click en el botón Add y automáticamente el nombre se agregara a la columna Added Servers, a continuación de click en el botón Next.

    Nota: Utilice los datos que dió de alta al  Activar la base de datos SQL Server.

    servidor-sql.jpg


    5.- De click en la opción SQL Server Authentication y luego en el botón Next.

    sql-server-authentication.jpg


    6.- Seleccione la opción Login Automatically using my SQL Server Account information, escriba el usuario y lacontraseña, posteriormente de click en el botón Next.

    sql-server-account.jpg



    7.- De click en la opción Add the SQL Server(s) to an existing SQL Server group, seleccione la opción SQL Server Group y luego en el botón Next.

    sql-server-group.jpg



    8.- Aparecerá un mensaje indicando que el servidor ha sido registrado satisfactoriamente. De click en el botón Close.

    sql-server-registered-succesfully.jpg


    9.- En la pantalla de SQL Server Enterprise Manager aparecerá el nuevo servidor registrado.

    servidor-sql-registrado.jpg



    SQL Server 2008 Conexion a servidor remoto

    cómo conectarse a un servidor SQL Server 2008.



    Conocimientos previos necesarios:
    ESTE ARTICULO CONTIENE INFORMACIÓN QUE DEBE SER HECHA ÚNICAMENTE POR USUARIOS EXPERIMENTADOS PARA EVITAR AFECTAR A SU SERVIDOR.

    1.- De click en el menú Start o Inicio, vaya a All Programs o Todos los programas,  seleccione Microsoft SQL Server 2008 y finalmente en SQL Server Management Studio.

    sql-server-management-studio.jpg

    2.- Aparecerá la pantalla Conect to Server, complete los datos solicitados considerando:
    • Server Name: Nombre del servidor 
    • Authentication: SQL Server Authentication
    • Login: Usuario
    • Password: Contraseña

    Nota: Utilice los datos que dió de alta al  Activar la base de datos SQL Server.

    conect-to-server-sql-2008.jpg


    3.- Del lado izquierdo de la aplicación aparecerá un árbol con el contenido del Servidor SQL, de click en el signo de más+, en la opción Databases o Bases de Datos para mostrar sus bases de datos.

    databases-sql-2008.jpg


    4.- Para Ver sus tablas, vistas o procedimientos almacenados, de click en el signo de más + correspondiente.

    tablas-vistas-procedimientos-sql-2008.jpg


    <p><a href='http://www.anuntiomatic.com?patrocinador=jromero81' target='_blank'><img src='http://www.anuntiomatic.com/images/banners/120x240_smallskycraper.gif' alt='Garantízate ingresos de por vida' width='120' height='240' border='0'/></a></p> 1

    SQL SERVER Triggers en Transact

    Triggers en Transact SQL

        Un trigger( o desencadenador) es una clase especial de procedimiento almacenado que se ejecuta automáticamente cuando se produce un evento en el servidor de bases de datos.
        SQL Server proporciona los siguientes tipos de triggers:
    • Trigger DML, se ejecutan cuando un usuario intenta modificar datos mediante un evento de lenguaje de manipulación de datos (DML). Los eventos DML son instrucciones INSERT, UPDATE o DELETE de una tabla o vista.
    • Trigger DDL, se ejecutan en respuesta a una variedad de eventos de lenguaje de definición de datos (DDL). Estos eventos corresponden principalmente a instrucciones CREATE, ALTER y DROP de Transact-SQL, y a determinados procedimientos almacenados del sistema que ejecutan operaciones de tipo DDL.

    Trigger DML.

        Los trigger DML se ejecutan cuando un usuario intenta modificar datos mediante un evento de lenguaje de manipulación de datos (DML). Los eventos DML son instrucciones INSERT, UPDATE o DELETE de una tabla o vista.
        La sintaxis general de un trigger es la siguiente.
    
    CREATE TRIGGER <Trigger_Name, sysname, Trigger_Name> 
    
    ON <Table_Name, sysname, Table_Name> 
    
    AFTER <Data_Modification_Statements, , INSERT,DELETE,UPDATE>
    
    AS 
    
    BEGIN-- SET NOCOUNT ON added to prevent extra result sets from
    
    -- interfering with SELECT statements.
    
    SET NOCOUNT ON;
    
    -- Insert statements for trigger here
    
    END
        Antes de ver un ejemplo es necesario conocer las tablas inserted y deleted.
        Las instrucciones de triggers DML utilizan dos tablas especiales denominadas inserteddeleted. SQL Server 2005 crea y administra automáticamente ambas tablas. La estructura de las tablas inserted y deleted es la misma que tiene la tabla que ha desencadenado la ejecución del trigger.
        La primera tabla (inserted) solo está disponible en las operaciones INSERT y UPDATE y en ella están los valores resultantes despues de la inserción o actualización. Es decir, los datos insertados. Inserted estará vacia en una operación DELETE.
        En la segunda (deleted), disponible en las operaciones UPDATE y DELETE, están los valores anteriores a la ejecución de la actualización o borrado. Es decir, los datos que serán borrados. Deleted estará vacia en una operacion INSERT.
        ¿No existe una tabla UPDATED? No, hacer una actualización es lo mismo que borrar (deleted) e insertar los nuevos (inserted). La sentencia UPDATE es la única en la que inserted y deleted tienen datos simultaneamente.
        No puede se modificar directamente los datos de estas tablas.
        El siguiente ejemplo, graba un historico de saldos cada vez que se modifica un saldo de la tabla cuentas.
    
    CREATE TRIGGER TR_CUENTAS
    
    ON CUENTAS
    
    AFTER UPDATE
    
    AS 
    
    BEGIN
    -- SET NOCOUNT ON impide que se generen mensajes de texto
    -- con cada instrucción
    SET NOCOUNT ON;
    INSERT INTO HCO_SALDOS
    (IDCUENTA, SALDO, FXSALDO)
    SELECT IDCUENTA, SALDO, getdate()
    FROM INSERTED
    END
        La siguiente instrucción provocará que el trigger se ejecute:
    
    UPDATE CUENTAS
    
    SET SALDO = SALDO + 10
    
    WHERE IDCUENTA = 1 
        Una consideración a tener en cuenta es que el trigger se ejecutará aunque la instruccion DML (UPDATE, INSERT o DELETE ) no haya afectado a ninguna fila. En este caso inserted y deleted devolveran un conjunto de datos vacio.
        Podemos especificar a que columnas de la tabla debe afectar el trigger.
    
    ALTER TRIGGER TR_CUENTAS
    
    ON CUENTAS
    
    AFTER UPDATE
    
    AS 
    
    BEGIN
    -- SET NOCOUNT ON impide que se generen mensajes de texto
    -- con cada instrucción
    SET NOCOUNT ON;
    IF UPDATE(SALDO) -- Solo si se actualiza SALDO
    BEGIN
    INSERT INTO HCO_SALDOS
    (IDCUENTA, SALDO, FXSALDO)
    SELECT IDCUENTA, SALDO, getdate()
    FROM INSERTED
    END
    END
        Los trigger están dentro de la transacción original (Insert, Delete o Update) por lo cual si dentro de nuestro trigger hacemos un RollBack Tran, no solo estaremos echando atrás nuestro trigger sino también toda la transacción; en otras palabras si en un trigger ponemos un RollBack Tran, la transacción de Insert, Delete o Update volverá toda hacia atrás.
    
    ALTER TRIGGER TR_CUENTAS
    
    ON CUENTAS
    
    AFTER UPDATE
    
    AS 
    
    BEGIN
    -- SET NOCOUNT ON impide que se generen mensajes de texto
    -- con cada instrucción
    SET NOCOUNT ON;
    INSERT INTO HCO_SALDOS
    (IDCUENTA, SALDO, FXSALDO)
    SELECT IDCUENTA, SALDO, getdate()
    FROM INSERTED
    ROLLBACK
    END
        En este caso obtendremos el siguiente mensaje de error:
    La transacción terminó en el desencadenador. Se anuló el lote.
        Podemos activar y desactivar Triggers a tarvés de las siguientes instrucciones.
    
    
    -- Desactiva el trigger TR_CUENTASDISABLE TRIGGER TR_CUENTAS ON CUENTAS
    
    GO
    
    -- activa el trigger TR_CUENTASENABLE TRIGGER TR_CUENTAS ON CUENTAS
    
    GO
    
    -- Desactiva todos los trigger de la tabla CUENTASALTER TABLE CUENTAS DISABLE TRIGGER ALL
    
    GO-- Activa todos los trigger de la tabla CUENTASALTER TABLE CUENTAS ENABLE TRIGGER ALL 
     

    Trigger DDL

        Los trigger DDL se ejecutan en respuesta a una variedad de eventos de lenguaje de definición de datos (DDL). Estos eventos corresponden principalmente a instrucciones CREATE, ALTER y DROP de Transact-SQL, y a determinados procedimientos almacenados del sistema que ejecutan operaciones de tipo DDL.
        La sintaxis general de un trigger es la siguiente.
    
    CREATE TRIGGER <trigger_name, sysname, table_alter_drop_safety> 
    
    ON DATABASE 
    
    FOR <data_definition_statements, , DROP_TABLE, ALTER_TABLE> 
    
    AS 
    
    BEGIN
    
     ...END 
        La siguiente instrucción impide que se ejecuten sentencias DROP TABLE y ALTER TABLE en la base de datos.
    
    CREATE TRIGGER TR_SEGURIDAD 
    
    ON DATABASE FOR DROP_TABLE, ALTER_TABLE 
    
    AS 
    
    BEGIN
    RAISERROR ('No está permitido borrar ni modificar tablas !' , 16, 1)
    ROLLBACK TRANSACTION
    END

    SQL Server Formatear números

    Formatear números en SQL Server

    Una duda que suele tener la gente es como formatear los datos numérico es SQL Server - Es bastante común tener que formatear un número completando con ceros hasta un número determinado de posiciones.
    Podemos hacer un bucle para concatenar la expresion resultante, pero no parece ni mucho menos la opción mas adecuada.
    El siguiente script ilustra una forma más eficiente de conseguir el mismo resultado.

     

    DECLARE @num int,
    @formato varchar(10),
    @expresion varchar(10)
    SET @formato = '0000000000'
    SET @num = 2002
    SET @expresion = RIGHT( @formato + cast(@num AS varchar), 10)
    SELECT @expresion
    La idea es concatenar una expresion de formato fijo - los ceros - con el número a formatear. Posteriormente utilizamos la función RIGHT para recortar los n elementos de la derecha.
    La salida de la ejecucion es la siguiente:

     

    DATO_FORMATEADO ---------------0000002002
    Como podemos ver, hemos conseguido nuestro objetivo. Por supuesto, este truco es válido también para completar con espacios en blanco - muy util para obtener ficheros de ancho fijo - o cualquier otro tipo de caracter.
    Podemos hacer las cosas un poco mejor, y creamos una funcion a la que le pasaremos el número a formatear y el formato de salida.
    CREATE FUNCTION dbo.FormatNum
    ( @number int,
    @format varchar(50)
    )
    RETURNS varchar(50)
    AS BEGIN DECLARE @len int
    SET @len = len(@format)
    RETURN RIGHT( @format + cast(@number AS varchar), @len)
    END
    Sobre  una supuesta tabla Pais, que hemos cargado previamente con cinco registros - con el código autonumérico - ejecutamos la siguiente consulta:
    SELECT dbo.FormatNum(CodPais,'000000000000') AS CodPais,
    NombrePais,
    ActivoFROM Pais
    El resultado de la consulta es el siguiente:
    CodPais           NombrePais     Activo
    ----------------- -------------- ------
    000000000001      Pais 0         0
    000000000002      Pais 1         0
    000000000003      Pais 2         0
    000000000004      Pais 3         0
    000000000005      Pais 4         0