Я согласен с обоими пунктами Мартина.Поэтому я использую триггер, чтобы избежать возможного снижения производительности RBAR в случае массового импорта данных в таблицу.В следующем коде мы хотим, чтобы для MyTable.MyColumn было установлено значение DefaultSource.DefaultMyColumn, если для MyColumn не было указано значение и у нас есть заполненное значение по умолчанию.Предполагается, что существует MyTable.DefaultId (желательно с внешним ключом), поэтому мы можем получить значение по умолчанию из правильной строки в DefaultSource.
CREATE TRIGGER [dbo].[TR_MyTable_AI_Default]
ON [dbo].[MyTable]
AFTER INSERT
AS
SET NOCOUNT ON;
UPDATE m
SET [MyColumn] = ds.[DefaultMyColumn]
FROM inserted i
JOIN [dbo].[MyTable] m ON i.[PrimaryKey] = m.[PrimaryKey]
JOIN [dbo].[DefaultSource] ds ON i.[DefaultId] = ds.[DefaultId]
WHERE a.[MyColumn] IS NULL
AND df.[DefaultMyColumn] IS NOT NULL;
Не пытайтесь обновить вставленную специальную таблицу напрямую,но вместо этого обновите базовую таблицу для триггера.