quarta-feira, 9 de junho de 2010

Trabalhando com Updatable Views no SQL Server - 2 de 2

Continuando post anterior (http://sqlbrasil.blogspot.com/2010/05/trabalhando-com-updated-views-no-sql.html)  vou demonstrar agora como criar Updatable Views no SQL Server:

Vamos criar um exemplo baseado em uma tabela de pedidos bem simplificada conforme instrução de create abaixo:

Create Table Pedidos

(DataPedido DateTime Not Null,
NroOrdem Int Not Null,
CodCliente Int,
ValorTotal Decimal(11,2),
Desconto Decimal(11,2),
DataEntrega DateTime,
Observacoes Varchar(80),
Primary Key (DataPedido, NroOrdem));

Vamos considerar "quebrar" esta tabela em três novas conforme a data do pedido
  • Pedidos até 01/01/2009
  • Pedido de 01/01/2009 até 31/12/2009
  • Pedidos posteriores a 31/12/2009
Na verdade para garantir que os dados respeitarão estas"regras devemos acrescentar uma CHECK CONSTRAINT, abaixo o início da criação das três novas tabelas, os outros campos ficam iguais a tabela original.

Create Table PedidosAte2008

(DataPedido DateTime Not Null CHECK (DataPedido < '01/01/2009'),
...
Create Table Pedidos2009

(DataPedido DateTime Not Null CHECK (DataPedido between '01/01/2009' and '31/12/2009'),
...
Create Table PedidosApos2009

(DataPedido DateTime Not Null CHECK (DataPedido > '31/12/2009'),

A seguir insira os dados nas tabelas "quebradas" conforme a check constraint:


Insert into PedidosAte2008
   Select * From Pedidos
   Where DataPedido < '01/01/2009';


Insert into Pedidos2009
Se fores utilizar a view com o mesmo nome da tabela original, renomeie ou exclua a tabela pedidos.
Agora basta criar a view "juntando" os dados das três tabelas:

Create View Pedidos
    With SchemaBinding
as
   Select DataPedido, NroOrdem, CodCliente,ValorTotal,Desconto,DataEntrega,Observacoes
    from dbo.PedidosAte2008
Union All
  Select DataPedido, NroOrdem, CodCliente,ValorTotal,Desconto,DataEntrega,Observacoes
   from dbo.Pedidos2009
Union All
   Select DataPedido, NroOrdem, CodCliente,ValorTotal,Desconto,DataEntrega,Observacoes
    from dbo.PedidosApos2009;

Com a view criada é possível utilizar Insert, Update e Delete nela que o SQL Server irá se basear na check constraint para identificar qual das três tabelas que deverá ser alterada.

Como no exemplo utilizamos o mesmo nome da tabela original, os programas que utilizavam a tabela Pedidos não precisarão ser alterados.

Nenhum comentário:

Postar um comentário