Artigo SQL Magazine 32 - Mão na massa: Dicas SQL Server

Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
Confirmar voto
0
 (1)  (0)

Nessa edição exploraremos diferentes tarefas executadas por um DBA através de dicas praticas sobre diversos assuntos do dia-a-dia da administração de bando de dados com SQL Server.

Atenção: por essa edição ser muito antiga não há arquivo PDF para download.
Os artigos dessa edição estão disponíveis somente através do formato HTML.

Clique aqui para ler todos os artigos desta edição

Mão na massa: Dicas SQL Server

 

Nessa edicao exploraremos diferentes tarefas executadas por um DBA através de dicas praticas sobre diversos assuntos do dia-a-dia da administração de bando de dados com SQL Server.

Bom proveito!

 

Como verificar se um arquivo existe em disco com T-SQL]

para verificar se um arquivo existe no sistema operacional via comando T-SQL, utilize a procedure SP_MSGET_FILE_EXISTANCE como apresentado na Listagem 1.

 

Listagem 1. Utilizando a procedure SP_MS_GET_FILE_EXISTANCE.

DECLARE @res int

EXEC máster..sp_MSget_fiel_existence

  ‘C:\Program Files\ Microsoft

      SQLever\MSSQL\Binn\SQLServr.exe’, @res out

if @res = 0

   print ‘Arquivo Inexistente’

else

   print ‘O arquivo existe!’

-----------------------------------------------------------

O arquivo existe!

 

Como verificar se uma tabela temporária existe

Tabelas temporárias são bastante utilizadas em batchs e procedures. A vida útil de uma tabela temporária esta limitada ao processo onde ocorreu sua criação:se a tabela foi criada numa procedure, será automaticamente eliminada com o desfecho da procedure, o mesmo vale para batchs. Acontece que muitas vezes em testes de depuração no Query Analyzer, trabalhamos com os mesmos nomes de tabelas temporárias e, não raro nos deparamos com erros do tipo ‘There is another object named ... in the database’, indicando que a tabela temporária já existe e não pode ser criada novamente.

No código da Listagem 2, a existência da tabela #temp é confirmada antes do comando de criação. Se a tabela já existir, será dropada.

 

Listagem 2. Verificando se uma tabela temporária existe.

if object_id(‘tempdb..#temp’) is not null drop table

#temp

create table # temp (codigo int, descry varchar(20))’

-----------------------------------------------------------

The command(s) completed successfully.

 

Update inteligente

Imagine o seguinte cenário: você possui uma tabela para controle da numeração de notas fiscais chamada controle_nf. Essa tabela possui somente uma linha e uma coluna chamada nro_nf. Sempre que uma nota é emitida, a rotina devera obter o próximo numero de nota fiscal valido a partir dessa tabela, incrementando uma unidade na numeração atual e salvando essa posição.

Bem, precisamos efetuar um UPDATE incrementando uma unidade na numeração da nota e depois recuperar esse valor. Uma possibilidade seria efetuar o UPDATE e depois executar um comando SELECT para recuperar o valor recém atualizado. O problema dessa solução é que podem ser geradas duplicidades e/ou deadlocks se o nível de isolamento não for adequado. Uma solução bastante simples e eficiente é atualizar uma variável durante o comando UPDATE, como ilustrado na Listagem 3.

 

Listagem 3. Update atualizando variável.

set nocount on

 

-- criação da tabela controle_nf

create table controle_nf (nro_nf int not null)

insert into controle_nf values (1000)

 

-- rotina para armazenar o próximo numero de rota numa variável

declare @nrio_nf int

update controle_nf

   set @nro_nf = nro_nf+1,

           nro_nf = nro_nf+1

 

select nro_nf = @nro_nf

-----------------------------------------------------------

nro_nf

----------------

1001

 

Ser ou não ser nulo, eis a questão!

Temos uma forte tendência em permitir colunas nulas – o famoso “ALLOW NULLS” – quando criamos tabelas. O problema com relação a colunas nulas é justamente o tratamento dessa condição: cedo ou tarde precisaremos comparar o conteúdo dessa coluna – e é aí que mora o perigo.

Quando criamos uma variável com o comando DECLARE, o SQL Server 200 ira reservar uma posição de memória para seu armazenamento. A reserva de uma posição de memória não inicializa o conteúdo da variável, ou seja, após a declaração da variável seu conteúdo permanecera “indefinido” (ou se preferir “nulo”) ate que um valor seja de fato atribuído para a variável com o comando SET.

O que aconteceria se comparássemos uma variável que acabou de ser declarada com uma constante NULL? Veja o resultado na Listagem 4.

 

Listagem 4. Comparando uma variável com uma constante nula.

declare @var int"

A exibição deste artigo foi interrompida :(
Este post está disponível para assinantes MVP

 
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Receba nossas novidades
Ficou com alguma dúvida?