Я бы предпочел стандартную функцию COALESCE ANSI, но 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 считается обнуляемым, хотя нет никакого способа, которым выражение coalesce может привести к нулевому значению.
Также с 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)
приводит к нарушению ограничения.