문제

지금까지 나는 사용하고 있습니다 ISNULL(dbo.fn_GetPrice(ItemId), 0) 무효가되지 않도록하기 위해 (오히려 기본값이라고 부르지 만 무엇이든이라고합니다).

이것이 올바른 방법입니까?

도움이 되었습니까?

해결책

예, 그것이 올바른 방법입니다. 사용함으로써 isnull 함수 당신은 무엇이든 상관없이 값을 반환 해야하는 표현식을 만들고 있습니다. 이것은 SQL Server에 의해 계산 된 열로 평가됩니다. not null.

다른 팁

ANSI 표준 Coalesce 기능을 선호하지만 IsNull은 괜찮습니다. Coalesce를 사용하려면 계산 된 열을 다음과 같이 정의하십시오.

COALESCE(dbo.fn_GetPrice(ItemId), 0)

편집하다 매일 새로운 것을 배우십시오. 나는 다음을했다 :

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

SP_HELP에 따르면 C2는 실제로 무효가되지 않지만, C4는 널 값을 늘릴 수있는 방법이 없지만 C4는 무효가 될 수있는 것으로보고된다.

또한 2008 년 현재 옵션이 2005 년에 존재하는지 여부를 모르겠습니다. 계산 된 열을 지속하고 제약 조건을 추가 할 수 있습니다.

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)

제약 조건 위반이 발생합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top