Libro gratis de SQL Server 2008 R2 (Ingles)

by 21. julio 2010 04:22

Para aquellos que les interese aprender y leer sobre esta nueva versión de SQL Server, les dejo estos links interesantes de un libro completo (idioma ingles) en formato PDF y XPS.

SQL2008R2

    PART I Database Administration
  • CHAPTER 1 SQL Server 2008 R2 Editions and Enhancements
  • CHAPTER 2 Multi-Server Administration
  • CHAPTER 3 Data-Tier Applications
  • CHAPTER 4 High Availability and Virtualization Enhancements
  • CHAPTER 5 Consolidation and Monitoring
      PART II Business Intelligence Development
  • CHAPTER 6 Scalable Data Warehousing
  • CHAPTER 7 Master Data Services
  • CHAPTER 8 Complex Event Processing with StreamInsight
  • CHAPTER 9 Reporting Services Enhancements
  • CHAPTER 10 Self-Service Analysis with PowerPivot

  • Tags:

    Material | Artículos

    Error Saving Changes is not permitted en el Management Studio de 2008

    by 15. abril 2009 05:33

    El SSMS (SQL Server Management Studio) de 2008 tiene varios cambios con respecto a sus versiones anteriores, a mi en lo general la mayoría me han gustado y mucho.

    Uno de esos cambios es una prevención de cambios en estructuras de nuestras tablas, muchas veces cuando utilizamos esta herramienta y hacemos cambios no nos damos cuenta por debajo de ese cambio que es realmente lo que sucede, hay algunas cosas que son simples y otras un poco mas complejas, por ejemplo si quiero agregar un nuevo campo y lo hago al final de los actuales eso a nivel TSQL se resuelve con un simple ALTER TABLE, ahora bien, si ese campo en lugar de querer agregarlo ultimo lo quiero hacer en medio de otro existente no quedara otro remedio a nivel TSQL que borrar la tabla, crearla nuevamente y pasar los datos, esto no seria problema si estamos en un ambiente de desarrollo o con pocos registros, pero que sucedería si estamos en un ambiente productivo o con muchos registros? pues podríamos colapsar al sistema ya que la operación demoraría un tiempo.

    Para ser mas explícitos con esto aquí abajo copio dos códigos, ambos son la salida de agregar un campo desde el SSMS a una tabla, el primero es como ultimo campo y el segundo ejemplo en el medio de algún campo actual para que podamos comparar las diferencias y que cosas tiene que hacer SQL para lograr nuestro cometido.

    Ejemplo 1

    BEGIN TRANSACTION
    GO
    ALTER TABLE dbo.EMPLEADOS ADD
        CUIT nchar(10) NULL
    GO
    ALTER TABLE dbo.EMPLEADOS SET (LOCK_ESCALATION = TABLE)
    GO
    COMMIT
     

    Ejemplo 2

    BEGIN TRANSACTION
    GO
    CREATE TABLE dbo.Tmp_EMPLEADOS
        (
        LEGAJO int NOT NULL,
        NOMBRE varchar(30) NULL,
        CUIT nchar(10) NULL,
        FECHA datetime NULL,
        EDAD int NULL
        )  ON [PRIMARY]
    GO
    ALTER TABLE dbo.Tmp_EMPLEADOS SET (LOCK_ESCALATION = TABLE)
    GO
    IF EXISTS(SELECT * FROM dbo.EMPLEADOS)
         EXEC('INSERT INTO dbo.Tmp_EMPLEADOS (LEGAJO, NOMBRE, FECHA, EDAD)
            SELECT LEGAJO, NOMBRE, FECHA, EDAD FROM dbo.EMPLEADOS WITH (HOLDLOCK TABLOCKX)')
    GO
    DROP TABLE dbo.EMPLEADOS
    GO
    EXECUTE sp_rename N'dbo.Tmp_EMPLEADOS', N'EMPLEADOS', 'OBJECT' 
    GO
    ALTER TABLE dbo.EMPLEADOS ADD CONSTRAINT
        PK__EMPLEADO__5487D90715702A09 PRIMARY KEY CLUSTERED 
        (
        LEGAJO
        ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    
    GO
    ALTER TABLE dbo.EMPLEADOS ADD CONSTRAINT
        CK__EMPLEADOS__EDAD__1758727B CHECK (([EDAD]>=(18) AND [EDAD]<=(70)))
    GO
    COMMIT

    Como se podrá observar el segundo ejemplo puede llegar a causarnos bastantes problemas. Bien esto sucede porque el cambio que le solicitamos no tiene otra opción que hacerlo así, en otras palabras nosotros desde el SSMS podemos hacer las cosas de forma visual (de eso se trata la idea de usar parte de esta herramienta) pero todo se traduce a sentencias TSQL.

     

    Ahora bien, en versiones anteriores al producto una persona podía hacer el segundo cambio sin mediar el impacto porque desconoce el mismo y la herramienta no lo previene.

    Ahora y con la versión 2008 por defecto hay un seteo en las opciones que nos permite prevenir cualquier cambio vía interfaz que represente el borrado de una tabla (como en nuestro ejemplo 2), esa opción se muestra en la siguiente figura y se llama Prevent saving changes that requiere table re-reation

     

    image

    Al estar esta opción activada cuando hacemos un cambio que representa una regeneración de la tabla nos encontraremos con el siguiente mensaje de error: Saving Changes is not permitted 

     

    image

    Tags:

    Artículos

    Novedades en SQL 2008: Cambios en TSQL

    by 24. marzo 2009 21:10

    SQL Server 2008 incorpora bastantes cambios, en esta ocasión veremos algunos referenciados a TSQL.

     

    Declaración , inicialización e incremento de variables

    Un cambio es el manejo de variables a nivel TSQL, ahora se asemeja cada día mas a lo que los desarrolladores estamos acostumbrados.

     

    DECLARE @VAR INT = 4
    
    SELECT @VAR
    
    SET @VAR +=1 -- INCREMENTOS
    
    SELECT @VAR     
    
     
    

    Modificación de la sentencia INSERT

    En versiones anteriores a 2008 si queríamos insertar mas de un registro debíamos usar tantos insert como registros necesitamos o bien insert en conjunto con Select.

    Ahora además de esto, la sentencia insert nos permite en una sola instrucción insertar mas de un valor como se muestra a continuación

    CREATE TABLE #T1 (ID INT)
    
    GO
    
    INSERT INTO #T1 VALUES (1),(2),(3),(4)
    
    GO
    
    SELECT * FROM #T1
    

     

    Tags: , ,

    Artículos

    Mi sistema realmente funciona en SQL 2005 / 2008

    by 24. marzo 2009 16:37

    En muchas ocasiones me encuentro en distintas empresas que tienen su SQL Server 2005 o 2008 y me dicen que sus sistemas son compatibles con estas versiones de SQL ya que esta corriendo sus bases sobre el.

    Pero en una gran parte de estos casos la cosa no es tan así como indican, que una base este sobre SQL Server 2005 o 2008 no quiere decir que sea compatible y este usando el poder de estos motores.

    Como es esto? simple: se puede tener una base de datos con compatibilidad hacia atrás, o sea puedo tener una base de datos en un 2005 con compatibilidad 80 lo cual significa que la base es un 2000 no usando las features de 2005, en otras palabra no es compatible con 2005

    Para lo cual es muy importante saber la compatibilidad de nuestras bases de datos, si es menor que 90 nos indica que no es ni 2005 ni 2008 compatible.

    En el siguiente listado les muestro los distintos modos de compatibilidad y a que versión corresponden

    Compatibilidad Versión de SQL
    65 6.5
    70 7.0
    80 2000
    90 2005
    100 2008

    Ahora bien, como saber en nuestro SQL que bases de datos no están siendo compatibles con la versión por mas que estén sobre ella ya que tienen una compatibilidad inferior.

    La opción mas simple es ir al Management Studio o al Enterprise Manager y ver las opciones de cada base de datos en la sección options y la propiedad “Compatibility Level”

    image

     

    También podemos hacer esto por medio de un simple query donde nos indicara que bases de datos no están en el modo de compatibilidad adecuado, para ello yo utilizo el siguiente código

     

       1:  declare @modo smallint
    
       2:   
    
       3:  select @modo =
    
       4:  convert(smallint,replace(CONVERT(varchar(2),
    
       5:  SERVERPROPERTY('Productversion')),'.','')) * 10
    
       6:   
    
       7:  select name,cmptlevel from master..sysdatabases
    
       8:  where cmptlevel < @modo
    
     
    
     
    
     
    

     

     

       
    
      
    

    Tags: , ,

    Artículos

    Maximiliano Damian Accotto