Я работаю над хранимой процедурой, которая должна быть повторно вставлена в таблицу с столбцом идентификации. Для этого для некоторых строк необходимо указать столбец идентификатора, для некоторых других предпочтительным будет новое значение идентификации, которое будет создано столбцом идентификации. Возможно ли это сделать в одном заявлении вместо IF-ELSE
?Как выбрать IDENTITY_INSERT или предоставить его в одном заявлении
Здесь решение у меня сейчас (где id_column
есть столбец идентификаторов):
DECLARE @id_to_insert INT, @val1 INT, @val2 INT, @val3 INT, @val4 INT;
-- Do some things
IF @id_to_insert IS NOT NULL
BEGIN
SET IDENTITY_INSERT dbo.table1 ON;
INSERT INTO dbo.table1 (id_column, col1, col2, col3, col4, col4)
VALUES (@id_to_insert, @val1, @val2, @val3, @val4);
SET IDENTITY_INSERT dbo.table1 OFF;
END
ELSE
BEGIN
INSERT INTO dbo.table1 (col1, col2, col3, col4, col4)
VALUES (@val1, @val2, @val3, @val4);
END
Как вы можете видеть, что оба утверждения очень похожи, было бы интересно, чтобы не пришлось повторять почти то же самое вставить.
EDIT:
Эта таблица содержит данные текущие контакты. Я перемещаю архивные/удаленные контакты в другую таблицу, поэтому мы сохраняем эту таблицу чистой и свободной от нежелательных данных, но иногда я могу восстановить их в текущей таблице данных. Если возможно, я хотел бы сохранить личность, с которой был связан контакт, до того, как он будет заархивирован/удален. Если это невозможно (идентификация уже была переназначена), мне нужно создать новую.
Уверен, что у меня нет проблем с тем, чтобы включить или выключить 'IDENTITY_INSERT', это была идея, которую я имел, но не могу заставить часть INSERT работать в обеих ситуациях в одном запросе. – MaxiWheat
То, что у вас есть, прекрасно написано, чтобы делать то, что вы просите. Реальный вопрос заключается в том, как вы можете переделать свою базу данных, чтобы в первую очередь избежать вставки идентификаторов. Вставка идентификатора требует, чтобы пользователи владели таблицей или имели альтернативное разрешение на таблицу, что не рекомендуется давать общим пользователям. Функция вставки идентификатора существует, чтобы разрешить миграцию данных и, как правило, должна использоваться только в режиме обслуживания, а не в том, что должно происходить как обычное явление. Добавьте контекст к вашему вопросу и, возможно, мы сможем помочь вам устранить эту проблему. –
@BrianPressler Я отредактировал мой вопрос с дополнительной информацией по контексту – MaxiWheat