지금까지 나는 ISNULL(dbo.fn_GetPrice(ItemId), 0)
을 사용하여 nullable이 아닌 (기본 값이라고 부름) 것을 사용했습니다.계산 된 열을 nullable로 만들 수 없습니까?
올바른 방법인가요?
지금까지 나는 ISNULL(dbo.fn_GetPrice(ItemId), 0)
을 사용하여 nullable이 아닌 (기본 값이라고 부름) 것을 사용했습니다.계산 된 열을 nullable로 만들 수 없습니까?
올바른 방법인가요?
네, 그게 올바른 방법입니다. isnull
함수를 사용하면 값을 반환해야하는 식을 만들 수 있습니다. 이 값은 SQL Server에서 계산 열로 계산됩니다 (not null
).
나는 ANSI 표준 COALESCE 함수를 선호하지만, ISNULL이 좋다. 뭔가에게 새로운 일상을 알아
COALESCE(dbo.fn_GetPrice(ItemId), 0)
편집 :로 COALESCE를 사용하려면 계산 열을 정의합니다. 나는 다음과 같은 한 :
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
그리고 C2는 sp_help는에 따라 참으로 널 (NULL)이 아니라 C4는 표현이 null 값이 발생할 수 병합 방법이 없다하더라도, 널 (NULL)로보고됩니다.
또한 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)
결과를.
Woops! 나는 COALESCE 또한 COALESCE (NULL, NULL)이 될 수 있기 때문에 계산 된 열이 nullable이되지 않는다는 것을 알아 냈습니다. 즉 null이 아닌 결과가 보장되지 않았기 때문에 ISNULL이 유일한 옵션이라고 생각합니다. 당신을 괴롭히는 것에 대해 유감스럽게 생각합니다. 방금 찾은 바에는 이미 DB를 몇 군데 변경했습니다 ... – Shimmy
어떤 SQL 언어를 사용하고 있습니까? – kiamlaluno
언어, SQL 언어, 데이터베이스 버전 등을 명확히해야합니다. – harschware
Microsoft SQL Server – Shimmy