Вы можете использовать вычисляемый столбец
alter table InspectionItems
add InspectionItemNumber = 'T' + RIGHT('00000'+CAST(InspectionItemId AS VARCHAR(5)),6)
В чем разница?
- Если не сохраняется или не индексируется, вычисляемый столбец будет оцениваться при
select
времени вместо insert
времени. - Вычисляемое значение столбца будет обновляться, если столбцы зависят от обновления, или если вы измените выражение. Это было бы неверно, если бы столбец вычислялся только с триггером вставки. Так что здесь есть разница в поведении.
- У вас есть выбор, действительно ли вы хотите сохранить вычисляемый столбец. Вы также можете поместить индекс в вычисляемый столбец. Эти варианты доступны не всегда, это зависит от выражения столбца. Ваше выражение детерминировано c и точно, поэтому все варианты открыты.
Последний совет по триггерам в целом: ваш триггер в том виде, в каком он написан, небезопасен. Вы предполагаете, что будет вставлена только одна строка. Но оператор вставки - это операция на основе набора. В таблице inserted
может быть более одной строки. Как бы вы присвоили переменной @InspectionItemId
несколько строк с InspectionItemId
значениями?
Вам нужно писать триггеры с учетом операций на основе наборов. Это означает, например, объединение таблиц inserted
и deleted
, а не присвоение переменных ожидаемых скаляров.