У меня есть код, подобный следующему в хранимой процедуре, которая вставляет строку в таблицу, я хотел бы установить для последнего столбца (FieldD) значение @prmSomeValue, если оно не равно нулю, в противном случае просто используйте значение по умолчанию определено для этого столбца.
IF (@prmSomeValue IS NULL)
INSERT INTO MyTable (fieldA,FieldB,FieldC)
SELECT A,B,C
FROM MyOtherTable
ELSE
INSERT INTO MyTable (fieldA,FieldB,FieldC,FieldD)
SELECT A,B,C,@prmSomeValue
FROM MyOtherTable
Это работает, но нарушает принцип СУХОЙ. Я пытаюсь найти способ сделать это с помощью одного оператора вставки. Что-то вроде следующего псевдокода.
INSERT INTO MyTable (fieldA,FieldB,FieldC,FieldD)
SELECT A,B,C,ISNULL(@prmSomeValue,DEFAULT)
FROM MyOtherTable
У кого-нибудь есть идеи?
Обновление - еще один поворот
Ограничение по умолчанию - это не буквальное значение, а функция, как показано ниже.
...DEFAULT (suser_sname()) FOR [FieldD]
Обновление
В конце концов, я выбрал меньшее из зол и просто скопировал функцию значения по умолчанию в свой запрос, вместо того, чтобы перейти к настройке по умолчанию, настроенной для столбца. Я не люблю это, но это выполняет работу с меньшим количеством повторений в моем запросе.
INSERT INTO MyTable (fieldA,FieldB,FieldC,FieldD)
SELECT A,B,C,ISNULL(@prmSomeValue,suser_sname())
FROM MyOtherTable