SQL Server 2008: "Construtores de Fila" el verdugo de UNION ALL

Si en SQL Server 2005, estabas cansado de usar escribir, escribir y escribir UNION ALL para realizar varias operaciones de inserción consecutivas o en bloques pues esto en SQL Server 2008 de alguna manera se ha solucionado con la implementación de una nueva característica llamada Constructores de Fila. Ahora podemos usar esta nueva funcionalidad  y ahorrarnos el trabajo es esta escribiendo cientos de UNION ALL. Me explico con un ejemplo bastante práctico.

Primero: Crear una tabla.

CREATE TABLE [Production].[Document](
    [DocumentID] [int] IDENTITY(1,1) NOT NULL,
    [Title] [nvarchar](50) COLLATE Latin1_General_CS_AS NOT NULL,
    [FileName] [nvarchar](400) COLLATE Latin1_General_CS_AS NOT NULL,
    [FileExtension] [nvarchar](8) COLLATE Latin1_General_CS_AS NOT NULL,
    [Revision] [nchar](5) COLLATE Latin1_General_CS_AS NOT NULL,
    [ChangeNumber] [int] NOT NULL CONSTRAINT [DF_Document_ChangeNumber]  DEFAULT ((0)),
    [Status] [tinyint] NOT NULL,
    [DocumentSummary] [nvarchar](max) COLLATE Latin1_General_CS_AS NULL,
    
    [ModifiedDate] [datetime] NOT NULL CONSTRAINT [DF_Document_ModifiedDate]  DEFAULT (getdate()),
 CONSTRAINT [PK_Document_DocumentID] PRIMARY KEY CLUSTERED 
(
    [DocumentID] ASC
)
) ON [PRIMARY]

Siguiente paso: Insertar Datos. En SQL Server 2005, podemos hacerlo de dos maneras.

La más trabajoso es esta:

INSERT INTO [Production].[Document]([Title],[FileName],[FileExtension],[Revision],[ChangeNumber],[Status],[DocumentSummary])
VALUES ('Installing Replacement Pedals','C:\Documents\Installing Replacement Pedals.doc','.doc','0',32,2,'Detailed instructions ...')

INSERT INTO [Production].[Document]([Title],[FileName],[FileExtension],[Revision],[ChangeNumber],[Status],[DocumentSummary])
VALUES ('Introduction 1','C:\Documents\Introduction 1.doc','.doc','4',28,2,NULL)

INSERT INTO [Production].[Document]([Title],[FileName],[FileExtension],[Revision],[ChangeNumber],[Status],[DocumentSummary])
VALUES ('Lubrication Maintenance','C:\Documents\Lubrication Maintenance.doc','.doc','2',11,1,'Guidelines and recommendations...')

INSERT INTO [Production].[Document]([Title],[FileName],[FileExtension],[Revision],[ChangeNumber],[Status],[DocumentSummary])
VALUES ('Seat Assembly','C:\Documents\Seat Assembly.doc','.doc','8',55,2,'Worn or damaged seats...')

Este problema (en SQL Server 2005) se soluciona usando UNION ALL, asi:

INSERT INTO [Production].[Document]([Title],[FileName],[FileExtension],[Revision],[ChangeNumber],[Status],[DocumentSummary])
SELECT 'Installing Replacement Pedals','C:\Documents\Installing Replacement Pedals.doc','.doc','0',32,2,'Detailed instructions ...'
UNION ALL
SELECT 'Introduction 1','C:\Documents\Introduction 1.doc','.doc','4',28,2,NULL
UNION ALL 
SELECT 'Lubrication Maintenance','C:\Documents\Lubrication Maintenance.doc','.doc','2',11,1,'Guidelines and recommendations...'
UNION ALL
SELECT 'Seat Assembly','C:\Documents\Seat Assembly.doc','.doc','8',55,2,'Worn or damaged seats...'

Para SQL Server 2008, usando Constructores de Fila, podemos hacerlo asi:

INSERT INTO [Production].[Document](  
      [Title]
      ,[FileName]
      ,[FileExtension]
      ,[Revision]
      ,[ChangeNumber]
      ,[Status]
      ,[DocumentSummary]
)
VALUES ('Installing Replacement Pedals','C:\Documents\Installing Replacement Pedals.doc','.doc','0',32,2,
        'Detailed instructions ...'),
('Introduction 1','C:\Documents\Introduction 1.doc','.doc','4',28,2,NULL),
('Lubrication Maintenance','C:\Documents\Lubrication Maintenance.doc','.doc','2',11,1,
        'Guidelines and recommendations...'),
('Seat Assembly','C:\Documents\Seat Assembly.doc','.doc','8',55,2,'Worn or damaged seats...')

Fijate que no tenemos que usar UNION ALL, ahorrándonos (como ya dije, y vuelvo a repetir...) mucho trabajo de estar escribiendo cientos de UNION ALL en el caso de desear insertar masivamente. Está demás decir, que la performance mejorará ya que será inserción directa.

Kill "UNION ALL" para este tipo de operaciones! :D.

Saludos,

Published 16/2/2008 11:01 por Percy Reyes
Archivado en: ,

Comentarios

# re: SQL Server 2008: "Construtores de Fila" el verdugo de UNION ALL

Uauuuuuu, una funcionalidad que ya tenía MySql, la caña.

Saturday, February 16, 2008 9:36 PM by nekotcha

# re: SQL Server 2008: "Construtores de Fila" el verdugo de UNION ALL

hey Percy .. mas que interesante !!! en especial porque los UNIONs suelen ser asesinos de la performance :D

Saludos

Saturday, February 16, 2008 10:51 PM by El Bruno

# re: SQL Server 2008: "Construtores de Fila" el verdugo de UNION ALL

Hola nekotcha!,

Claro, en MySql ya existe esta funcionalidad desde hace mucho tiempo, sin embargo el punto no es ese, el punto es que en SQL Server 2008 ya podemos explotar esta funcionalidad ;).

Saludos,

Saturday, February 16, 2008 11:00 PM by Percy Reyes

# re: SQL Server 2008: "Construtores de Fila" el verdugo de UNION ALL

Hola Bruno!,

Un gusto de tenerte por aqui!,

Claro, uno de los puntos a favor es justamento eso: mejora de la performance!. En fin, estaremos al tanto de más novedades !!! :D.

Saludos,

Saturday, February 16, 2008 11:03 PM by Percy Reyes

# re: SQL Server 2008: "Construtores de Fila" el verdugo de UNION ALL

Percy...realmente espectácular. Espero que nos sigas contando maás novedades a nivel de comandos T-SQL...este me lo apunto para demos de eventos del CIIN ;)

JC's

Sunday, February 17, 2008 1:31 AM by Juan Carlos González Martín

# re: SQL Server 2008: "Construtores de Fila" el verdugo de UNION ALL

Hola JC's :

Desde luego espero seguir contando más cosas... :) , y muchas gracias por tu comentario!!! :).

Saludos!!!,

Sunday, February 17, 2008 2:33 AM by Percy Reyes

# re: SQL Server 2008: "Construtores de Fila" el verdugo de UNION ALL

Hola Espinete!

pues el problema es tanto "escribir más" (te hace menos productivo), y así como también caída en el rendimiento, son operaciones INSERT separadas .

Saludos,

Monday, February 18, 2008 2:12 PM by Percy Reyes

# re: SQL Server 2008: "Construtores de Fila" el verdugo de UNION ALL

Muy interesante, pero si se trabaja con tablas de varios miles o millones de registros hay que ver que pasa eh.

http://s4h-team.blogspot.com/

Tuesday, February 26, 2008 3:59 AM by S4HTeam

# SQL Server 2008: Mejoras para desarrolladores (I)! « Pasi??n por la tecnolog??a…

PingBack desde  SQL Server 2008: Mejoras para desarrolladores (I)! « Pasi??n por la tecnolog??a…

# re: SQL Server 2008: "Construtores de Fila" el verdugo de UNION ALL

En mysql esos ya viene xD

Wednesday, January 13, 2010 9:12 PM by Alfredo

Deja tu comentario

(requerido) 
(requerido) 
(opcional)
(requerido)