No SQL Server, as colunas varchar não anuláveis podem conter strings vazias.
No ORACLE eles não podem, porque varchar2 trata '' como equivalente a NULL.
Se você projetar um esquema de banco de dados adequado para ambos os RDBMS, parece ser uma boa ideia adicionar a cada coluna varchar não anulável no SQL Server uma restrição que não permita strings vazias.
Mas qual é a melhor maneira de formular tal restrição?
eu comecei com
if OBJECT_ID('varchar_without_empty_cols') > 0 drop table varchar_without_empty_cols
go
create table varchar_without_empty_cols (
id int ,
val varchar(10) not null CHECK (val <> '')
)
go
insert into varchar_without_empty_cols values (1, ' ') -- this ought be OK
go
insert into varchar_without_empty_cols values (2, '') -- this has to violate the check
go
insert into varchar_without_empty_cols values (3, null) -- this violates the not null
go
select * from varchar_without_empty_cols
Mas essa restrição não apenas inibe strings vazias, o que é intencional, mas também inibe strings que consistem em um único caractere, e não é isso que pretendo.
Para permitir strings contendo apenas espaços, mas proibir strings vazias, você pode usar