Table and Row Value Constuctor

Posted on junho 10, 2011

0


Estava estudando sobre T-SQL com um dos livros do Itzik Ben-Gan e achei esse recurso bastante interessante. Com ele podemos realizar a seguinte brincadeira:

Primeiramente vamos criar uma tabela e inserir alguns dados nela.

 

USE tempdb

GO

 

 

–Criação Tabela de Produto

IF OBJECT_ID (‘dbo.Produto’) IS NOT NULL

      DROP TABLE dbo.Produto

GO

 

CREATE TABLE Produto

(

      ID INT IDENTITY(1,1) NOT NULL

  , Nome VARCHAR(20) NOT NULL

  , Tipo VARCHAR(20) NULL

)

GO

 

ALTER TABLE Produto

ADD CONSTRAINT PK_Produto_ID

PRIMARY KEY (ID)

GO

 

ALTER TABLE Produto

ADD CONSTRAINT UNQ_Produto_Nome

UNIQUE (Nome)

GO

 

–Inserção de Dados Básicos

INSERT INTO dbo.Produto (Nome, Tipo)

VALUES (‘SQL Azure’,‘Banco de Dados’),

         (‘SQL Server’,‘Banco de Dados’),

         (‘Visual Studio 2010’,‘Programação’),

         (‘DB2’, ‘Banco de Dados’)

GO

 

Os dados na tabela:

 

image

 

Se por um acaso eu quisesse tranformar o meu INSERT INTO  em uma VT (Virtual Table), para analisar, visualizar os dados, ou somente mesmo por ser Geek? rs..

Podemos utilizar o Table and Row Value Contructor, fazendo assim:

 

–Table and Row Value Constructor

SELECT  *

FROM (

      VALUES (‘DB2’, ‘Banco de Dados’),

               (‘Oracle’,‘Banco de Dados’),

               (‘Eclipse’,‘Programação’),

               (‘NetBeans’,‘Programação’)

      )  AS O (Nome, Tipo)

 

 

Resultado:

image

 

Aqui realizei a transformação do INSERT INTO nessa tabela, legal não?

E ainda querendo mais, vamos supor que eu quisesse comparar os dados dessa tabela agora criada, com a tabela de Produto, sabendo quais produtos nessa lista não estão cadastrados para depois cadastrar?

 

Iremoa agora comparar esses dados com o da tabela, e depois realizar a inserção dos produtos não cadastrados fazendo o seguinte script:

 

;WITH ProdutosNaoCadastrados AS

(

      SELECT  *

      FROM (

      VALUES (‘DB2’, ‘Banco de Dados’),

               (‘Oracle’,‘Banco de Dados’),

               (‘Eclipse’,‘Programação’),

               (‘NetBeans’,‘Programação’)

      )  AS O (Nome, Tipo)

      WHERE O.Nome NOT IN

      (

            SELECT  P.Nome

            FROM Produto AS P

      )

)

INSERT INTO Produto

SELECT  *

FROM ProdutosNaoCadastrados

 

E no final temos:

image

 

Isso sim é diversão…..

 

Gostou dessa brincadeira? Então deixe seu comentário.

Posted in: Script's