我正在研究一个需要在具有标识列的表中重新插入元素的存储过程。这样做,对于某些行,它需要指定标识列,对于其他一些行,最好由标识列生成新的标识值。是否可以在单个语句中而不是在一个语句中执行此操作IF-ELSE
?
这是我现在拥有的解决方案(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
如您所见,这两个语句非常相似,不必重复几乎相同的插入会很有趣。
编辑:
此表保存当前联系人数据。我将存档/删除的联系人移动到另一个表,因此我们保持此表清洁且没有不需要的数据,但有时我可能会将它们恢复到当前数据表。如果可能的话,我想保留联系人在存档/删除之前的身份。如果不可能(身份已经重新分配),我需要生成一个新的。