作为标题,我有一个已经填充了150000条记录的现有表。我添加了一个Id列(目前为空)。
我假设我可以运行一个查询,用增量数字填充这个列,然后设置为主键并打开自动增量。这是正确的做法吗?如果是,我怎么填入初始数字?
作为标题,我有一个已经填充了150000条记录的现有表。我添加了一个Id列(目前为空)。
我假设我可以运行一个查询,用增量数字填充这个列,然后设置为主键并打开自动增量。这是正确的做法吗?如果是,我怎么填入初始数字?
当前回答
您不能“打开”IDENTITY:这是一个表重建。
如果您不关心数字顺序,您可以用IDENTITY一次性添加列NOT NULL。15万行不是很多。
如果您需要保留一些数字顺序,那么相应地添加数字。然后使用SSMS表设计器设置IDENTITY属性。这允许您生成一个脚本,该脚本将为您执行列删除/添加/保留数字/重新播种。
其他回答
创建一个具有不同名称和相同列、主键和外键关联的新表,并将其链接到代码的Insert语句中。 对于EMPLOYEE,替换为EMPLOYEES。
CREATE TABLE EMPLOYEES(
EmpId INT NOT NULL IDENTITY(1,1),
F_Name VARCHAR(20) ,
L_Name VARCHAR(20) ,
DOB DATE ,
DOJ DATE ,
PRIMARY KEY (EmpId),
DeptId int FOREIGN KEY REFERENCES DEPARTMENT(DeptId),
DesgId int FOREIGN KEY REFERENCES DESIGNATION(DesgId),
AddId int FOREIGN KEY REFERENCES ADDRESS(AddId)
)
但是,您必须删除现有的EMPLOYEE表,或者根据您的需求进行一些调整。
如果你的表与其他使用主键或外键的表有关系,可能是不可能改变你的表。因此,您需要删除并重新创建表。 要解决这些问题,您需要通过右键单击数据库来生成脚本,并在高级选项中设置数据到脚本到方案和数据的类型。在此之后,使用此脚本与更改列一起使用运行其查询来标识和重新生成表。 你的问题会像这样:
USE [Db_YourDbName]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
Drop TABLE [dbo].[Tbl_TourTable]
CREATE TABLE [dbo].[Tbl_TourTable](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](50) NULL,
[Family] [nvarchar](150) NULL)
GO
SET IDENTITY_INSERT [dbo].[Tbl_TourTable] ON
INSERT [dbo].[Tbl_TourTable] ([ID], [Name], [Family]) VALUES (1,'name 1', 'family 1')
INSERT [dbo].[Tbl_TourTable] ([ID], [Name], [Family]) VALUES (1,'name 1', 'family 1')
INSERT [dbo].[Tbl_TourTable] ([ID], [Name], [Family]) VALUES (1,'name 1', 'family 1')
INSERT [dbo].[Tbl_TourTable] ([ID], [Name], [Family]) VALUES (1,'name 1', 'family 1')
INSERT [dbo].[Tbl_TourTable] ([ID], [Name], [Family]) VALUES (1,'name 1', 'family 1')
INSERT [dbo].[Tbl_TourTable] ([ID], [Name], [Family]) VALUES (1,'name 1', 'family 1')
INSERT [dbo].[Tbl_TourTable] ([ID], [Name], [Family]) VALUES (1,'name 1', 'family 1')
SET IDENTITY_INSERT [dbo].[Tbl_TourTable] off
试试下面的代码:
DBCC CHECKIDENT ('settings', RESEED, 0)
ALTER TABLE table_name ADD temp_col INT IDENTITY(1,1)
update
Alter table /**粘贴tabal的名称**/ 添加id int (1,1)
删除/**,粘贴tabal的名称**/ id在哪里
(
选择a.d id FROM /**粘贴tabal的名字/作为a 左外连接( SELECT MIN(id) as id 从/粘贴tabal的名称/ 集团 /粘贴列c1,c2 ....* * /
) as t1
ON a.id = t1.id
在t1。id为空
)
Alter table /**粘贴tabal的名称**/ DROP列id