quinta-feira, 23 de abril de 2009

Regras de campos texto no SQL Server

É uma coisa de deixar muita gente bobo. Qual a diferença entre um campo nulo (NULL) e um campo vazio ("" ou '') se ambos estão em branco?
Na prática, um campo nulo é aquele que nunca foi preenchido e um campo vazio é aquele que foi preenchido e depois apagado.
Mesmo que você defina o ALLOW NULLS como não, se o campo for digitado e depois apagado, ficando vazio, o SQL Server aceitará! A solução para isso é criar uma constraint do tipo

use bancoxxx;
go

alter table tabela1
add constraint tabela1_campo1_regra_nãoaceitavazio
check (campo1 <> '')

Assim você assegura que seus campos obrigatórios realmente sejam obrigatórios em qualquer situação.

Trabalho com o Microsoft Access XP (VBA) acessando SQL Server e quando descobri isso meu banco já tinha dezenas de tabelas e cada tabela com vários campos, perfazendo um total de milhares de campos sujeitos a isso que considero uma falha ridícula do SQL Server, mesmo que tecnicamente seja considerado correto.

A solução? Bolei uma forma muito louca de fazer um loop por todas as tabelas através do sp_columns @table_name, pegar só os campos nvarchar e aplicar a regra, mandando stored procedures em massa pro SQL. Com 1 ou 2 horas de programação realizei um trabalho que levaria dias de tédio para ser concluído se fosse feito manualmente.

Nenhum comentário:

Postar um comentário