【发布时间】:2014-05-02 17:47:02
【问题描述】:
我在 SQL Server 中有一个名为 Personal_Info 的表。此表有一个名为Vol_ID 的列,(Is Identity) 属性为Yes。
现在我插入了大约 175568 行作为测试。然后我删除了大约 568 行,但是当我再次插入数据时,列 Vol_ID 从 175569 开始而不是从 175001 开始。
我想插入数据并让Vol_ID 列从其中的最后一个数字开始。例如,如果最后一行是 15,则下一行应该从 16 开始,即使我已经插入但我删除了它。
我需要一个存储过程或触发器,它可以强制插入操作填充缺失的 id,检查最后存在的行,如果在存在之后有缺失的 id,然后填充它。
我有这个程序来进行插入
USE [VolunteersAffairs]
go
/****** Object: StoredProcedure [dbo].[AddVolunteer] Script Date: 05/02/2014 21:12:36 ******/
SET ansi_nulls ON
go
SET quoted_identifier ON
go
ALTER PROCEDURE [dbo].[Addvolunteer] @Vol_Name NVARCHAR(255),
@Vol_Zone NVARCHAR(255),
@vol_street NVARCHAR(255),
@Vol_Sex INT,
@Vol_Date_of_Birth DATE,
@Vol_Home_Phone INT,
@Vol_Work_Phone INT,
@Vol_Mobile1 INT,
@Vol_Mobile2 INT,
@Vol_Email NVARCHAR(255),
@Vol_Job NVARCHAR(255),
@Vol_Affiliation NVARCHAR(255),
@vol_Education INT,
@vol_Education_Place NVARCHAR(255),
@vol_Education_Department NVARCHAR(255),
@vol_Interesting INT,
@vol_Notes NVARCHAR(255),
@Team_ID INT
AS
INSERT INTO personal_info
(vol_name,
vol_zone,
vol_street,
vol_sex,
vol_date_of_birth,
vol_home_phone,
vol_work_phone,
vol_mobile1,
vol_mobile2,
vol_email,
vol_job,
vol_affiliation,
vol_education,
vol_education_place,
vol_education_department,
vol_interesting,
team_id,
vol_notes)
VALUES (@Vol_Name,
@Vol_Zone,
@vol_street,
@Vol_Sex,
@Vol_Date_of_Birth,
@Vol_Home_Phone,
@Vol_Work_Phone,
@Vol_Mobile1,
@Vol_Mobile2,
@Vol_Email,
@Vol_Job,
@Vol_Affiliation,
@vol_Education,
@vol_Education_Place,
@vol_Education_Department,
@vol_Interesting,
@Team_ID,
@vol_Notes)
请帮我写下丢失的身份证
【问题讨论】:
-
您需要重新设置身份列。
-
一句忠告:不要这样做!你应该永远不要 “回收”以前用于新行的标识值。不要这样做 - 如果你这样做,你最终会陷入数据库地狱!
-
Stop making assumptions about
IDENTITY,别再担心差距了 - 它们真的不是问题!
标签: sql sql-server sql-server-2008 sql-server-2008-r2