修改表的列为主键和自增。
文章标题:关于为主键和自增列修改表的问题及解决方法
在寻找如何在SQL Server 2019中以编程方式为表分配自增功能时,我发现了这个问题。我的情况是,我尝试将自增功能应用于一个导入的表,而该表在导入时,正在尝试应用自增功能的列已经具备了自增的要求——每个值都是唯一的且具有正确的数据类型。
这个问题以及其他研究帮助我理解了我不能以编程方式实现这个目标。但这并不妨碍我实际上实现了这个结果。我可以在SSMS中的设计视图中打开表,并在那里分配自增功能,只要种子和自增间隔与原始表的设置相匹配。显然,如果涉及到很多表,这不是一个快速的解决方案,但它能保护自增值的完整性,尤其是当它们被用作其他关联表中的外键时。
这并没有直接回答问题。
在数据库中,无法更改现有列的定义来添加IDENTITY属性(也无法删除它)。您必须创建一个具有IDENTITY属性的新列。
不幸的是,您无法将旧的ID值分配给这个新列。如果您想分配ID值,然后让IDENTITY接管,最好创建一个具有所需结构的新表,然后从旧表导入数据(您可以使用IDENTITY_INSERT为IDENTITY列分配值)。
然后,您可以删除旧表并重命名新表(如果需要的话)。
如果还需要主键,可以使用以下命令:
ALTER TABLE LookupStates ADD Id int IDENTITY(1,1) PRIMARY KEY not null
在MSSQL中,IDENTITY不是主键的定义。主键是一个或多个用于唯一标识每一行的列。IDENTITY是在单个列中为每一行应用唯一值的一种方法。可以使用其中一个来创建另一个,但它们并不是同一概念。通常称为代理键,如果你没有一个自然键,那么你建模的不是数据,而是随机的事实组合。