Como tornar a coluna computada não anulável?
-
20-09-2019 - |
Pergunta
Até agora eu tenho usado ISNULL(dbo.fn_GetPrice(ItemId), 0)
para torná-lo não anulável (em vez disso, chame-o de valor padrão, mas seja o que for).
É o caminho certo?
Solução
Sim, essa é a maneira certa de fazê -lo. Usando o isnull
Função Você está criando uma expressão que deve retornar um valor, não importa o quê. Isso é avaliado pelo SQL Server como uma coluna calculada que é not null
.
Outras dicas
Eu preferiria a função Coalesce padrão ANSI, mas o ISNULL está bem. Para usar o Coalesce, defina sua coluna calculada como:
COALESCE(dbo.fn_GetPrice(ItemId), 0)
EDITAR Aprenda algo novo todos os dias. Eu fiz o seguinte:
create table t (c1 int null
, c2 as isnull(c1, 1)
, c3 as isnull(c1, null)
, c4 as coalesce(c1, 1)
, c5 as coalesce(c1, null)
)
exec sp_help t
E C2 não é realmente anulável de acordo com o SP_HELP, mas C4 é relatado como sendo anulável, mesmo que não haja como a expressão de coalesce resultar em um valor nulo.
Também a partir de 2008, não sei se a opção existe em 2005, pode -se persistir em uma coluna computada e adicionar uma restrição:
create table t (c1 int null
, c2 as isnull(c1, 1) persisted not null
, c3 as isnull(c1, null) persisted not null
, c4 as coalesce(c1, 1) persisted not null
, c5 as coalesce(c1, null) persisted not null
)
go
insert into t (c1) values (null)
resulta em uma violação de restrição.