Предполагая, что идентификатор вашей таблицы является столбцом Identity, вы можете использовать ограничение:
ALTER TABLE MyTable
ADD CONSTRAINT MyTableCodeDefault
DEFAULT IDENT_CURRENT('MyTable') FOR Code
Это работает для следующих случаев использования:
INSERT INTO MyTable DEFAULT VALUES
INSERT INTO MyTable ({columns NOT including 'Code'})
VALUES ({value list matching insert columns})
INSERT INTO MyTable (Code) VALUES (666)
INSERT INTO MyTable (Code) SELECT 8 UNION SELECT 13 UNION SELECT 21
Но это не работает для массовых вставок:
INSERT INTO MyTable ({columns NOT including 'Code'})
SELECT {value list matching insert columns}
UNION
SELECT {value list matching insert columns}
UNION
SELECT {value list matching insert columns}
Это ограничение может показаться обременительным, но по моему практическому опыту, это редко проблема. В большинстве случаев использования, с которыми мне приходилось сталкиваться, для которых необходимо значение по умолчанию, требуется удобство пользовательского интерфейса: не заставляйте пользователя выбирать значение, если он этого не хочет.
OTOH, я редко сталкиваюсь с ситуациями массовой вставки, когда нецелесообразно указывать значение для целевых столбцов.