Это кажется полностью избыточным, но вы можете повторить условие в ограничении check
:
ALTER TABLE UnitHistory
ADD PrefixedUnitId AS ( UnitHistory.UnitIdPrefix + cast(UnitHistory.UnitId AS nvarchar(8)) );
ALTER TABLE UnitHistory
ADD CONSTRAINT CHECK ( UnitHistory.UnitIdPrefix + cast(UnitHistory.UnitId AS nvarchar(8)) IS NOT NULL );
Однако, поскольку исходные столбцы равны NOT NULL
, результат никогда не может быть NULL
.
Понятие непостоянных вычисляемых столбцов заключается в том, что они рассчитаны на вывод , а не ввод .Я думаю, это объясняет, почему ограничения check
не подходят.
Например, у вас может быть таблица с вычисляемым столбцом, который генерирует ошибку, и при этом полностью использовать таблицу:
create table t (
id int identity primary key,
x int,
computed as (1 / 0)
);
-- works
insert into t (x) values (1);
-- works
select x
from t;
-- fails
select *
from t;
Здесь - это db <> fiddle.
Кстати, вычисляемый столбец, который всегда генерирует ошибку, имеет приятный побочный эффект - он не позволяет пользователям использовать select *
, если этото, что вы хотите сделать.