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
-3
这个答案是对最高投票答案的一个小补充,适用于SQL Server . 该问题请求自动增量主键,当前答案确实添加了主键,但未标记为自动增量 . 下面的脚本检查列是否存在,并在启用自动增量标志的情况下添加它 .
IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'YourTable' AND COLUMN_NAME = 'PKColumnName')
BEGIN
ALTER TABLE dbo.YourTable
ADD PKColumnName INT IDENTITY(1,1)
CONSTRAINT PK_YourTable PRIMARY KEY CLUSTERED
END
GO
0
尝试这样的事情(首先在测试台上):
USE your_database_name
GO
WHILE (SELECT COUNT(*) FROM your_table WHERE your_id_field IS NULL) > 0
BEGIN
SET ROWCOUNT 1
UPDATE your_table SET your_id_field = MAX(your_id_field)+1
END
PRINT 'ALL DONE'
13 回答
不 - 你必须反过来这样做:从get get开始直接添加
INT IDENTITY
- 执行此操作时将填充标识值:然后你可以把它作为主键:
或者如果你喜欢一步到位:
你不能“打开”IDENTITY:它是一个表重建 .
如果您不关心数字顺序,则可以一次性添加带有IDENTITY的列NOT NULL . 150k行不是很多 .
如果您需要保留一些数字顺序,请相应地添加数字 . 然后使用SSMS表设计器设置IDENTITY属性 . 这允许您生成一个脚本,该脚本将为您执行列删除/添加/保留数字/重新设置 .
我有这个问题,但无法使用标识列(出于各种原因) . 我决定这个:
借用here .
如果列已存在于表中且为null,则可以使用此命令更新列(替换id,tablename和tablekey):
当我们在现有表中添加和标识列时,它将自动填充,无需手动填充它 .
通过设计师你可以设置标识(1,1)右键单击tbl => desing =>在左侧(右键单击)=> properties =>在标识列中选择#column
Properties
idendtity column
这是一个你可以尝试的想法 . 原始表 - 没有标识列table1创建一个新表 - 调用table2以及标识列 . 将数据从table1复制到table2 - 使用自动递增的数字自动填充标识列 .
重命名原始表 - table1到table3将新表重命名 - table2重命名为table1(原始表)现在,您将table1包含标识列并填充现有数据 . 在确保没有问题并且正常工作之后,在不再需要时删除table3 .
创建一个具有不同名称和相同列,主键和外键关联的新表,并在您的Insert语句中链接它 . 例如:对于员工,请使用EMPLOYEES替换 .
但是,您必须删除现有的EMPLOYEE表或根据您的要求进行一些调整 .
如果您的表使用其主键或foriegen键与其他表有关系,则可能无法更改您的表 . 所以你需要再次删除并创建表 .
要解决这些问题,您需要通过右键单击数据库生成脚本,并在高级选项集数据类型中编写脚本到方案和数据 . 之后,使用此脚本更改列以使用运行其查询来标识和重新生成表 .
您的查询将如下所示:
这个答案是对最高投票答案的一个小补充,适用于SQL Server . 该问题请求自动增量主键,当前答案确实添加了主键,但未标记为自动增量 . 下面的脚本检查列是否存在,并在启用自动增量标志的情况下添加它 .
尝试这样的事情(首先在测试台上):
我根本没有测试过这个,所以要小心!
这在MariaDB中有效,所以我只希望它在SQL Server中运行:删除刚刚插入的ID列,然后使用以下语法: -
ALTER TABLE table_name ADD id INT PRIMARY KEY AUTO_INCREMENT;
不需要另一张 table . 这只是插入一个id列,使其成为主索引,并使用顺序值填充它 . 如果SQL Server不这样做,我很抱歉浪费你的时间 .
ALTER TABLE table_name ADD COLUMN ID INT NOT NULL PRIMARY KEY AUTO_INCREMENT;这可能很有用