Transações envolvendo DDL no SQL Server 2005
Veja neste artigo como efetuar transições envolvendo DDL no SQL Server 2005.
Transações envolvendo DDL no SQL Server 2005
Por Reydeval Rocha
Olá pessoal!!!
Hoje trataremos de um tema muito interessante: transações envolvendo instruções DDL – Data Definition Language.
Introdução
Sabemos que transações são unidades lógicas de trabalho, ou seja, todas as instruções que compõem o bloco são efetivadas ou nenhuma delas é efetivada. Esse conceito garante a consistência e integridade dos dados. O interessante é que no SQL Server as transações não funcionam apenas com instruções DML, mas também com instruções DDL. Vejamos os exemplos abaixo que ilustram a utilização de transações envolvendo comandos DDL.
Usando transações com DDL
--CENARIO1-------------------------------------------------
--Transação com instruções DDL
--A instrução insert causa erro de integridade referencial,
--acarretando em rollback em TODAS as instruções.
-----------------------------------------------------------
begin tran
create table tb_mae(codigoint identity,
campo1char(1))
alter table tb_mae add constraint pk_mae primary key(codigo)
create table tb_filha( codigo int identity,
campo1 char(1),
mae int)
alter table tb_filha add constraint pk_filha primary key(codigo)
insert into tb_filha(campo1,mae)
values ('S',1)
alter table tb_filha add constraint fk_mae_filha
foreign key(mae) references tb_mae(codigo)
if @@error <> 0
rollback tran
else
commit
select * from tb_mae
Observem a mensagem ao executar os selects acima:
Msg 208, Level 16, State 1, Line 1
Invalid object name 'tb_mae'.
Isso significa que o SQL Server fez um rollback nas instruções anteriores, inclusive, nos creates table.
--CENARIO2-------------------------------------------------
--Transação com instruções DDL
--A instrução insert não causa erro de integridade referencial,
--acarretando em commit na transação.
-----------------------------------------------------------
drop table tb_mae
drop table tb_filha
begin tran
create table tb_mae(codigoint identity,
campo1char(1))
alter table tb_mae add constraint pk_mae primary key(codigo)
insert into tb_mae(campo1)
values ('A')
create table tb_filha( codigo int identity,
campo1char(1),
maeint)
alter table tb_filha add constraint pk_filha primary key(codigo)
alter table tb_filha add constraint fk_mae_filha
foreign key(mae) references tb_mae(codigo)
insert into tb_filha(campo1,mae)
values ('S',1)
if @@error <> 0
rollback tran
else
commit
Conclusão
Mostramos de rápida que é possível utilizar transações com instruções DDL da mesma forma que se utiliza transações com instruções DML. Até o próximo artigo!
Artigos relacionados
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Artigo