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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top