【问题标题】:How to add a column in a table and then turn it into the primary key column and add values on SQL?如何在表中添加一列,然后将其变成主键列并在SQL上添加值?
【发布时间】:2012-12-14 00:03:37
【问题描述】:

我现在有这张桌子...

CREATE TABLE [dbo].[DatosLegales](
    [IdCliente] [int] NOT NULL,
    [Nombre] [varchar](max) NULL,
    [RFC] [varchar](13) NULL,
    [CURP] [varchar](20) NULL,
    [IMSS] [varchar](20) NULL,
    [Calle] [varchar](100) NULL,
    [Numero] [varchar](10) NULL,
    [Colonia] [varchar](100) NULL,
    [Pais] [varchar](50) NULL,
    [Estado] [varchar](50) NULL,
    [Ciudad] [varchar](50) NULL,
    [CodigoPostal] [varchar](10) NULL,
    [Telefono] [varchar](13) NULL,
    [TipoEmpresa] [varchar](20) NULL,
    [Tipo] [varchar](20) NULL,
)

IdCliente 既是主键(不可索引),又与另一个表相关。 我现在想要的是添加一个名为 IdDatoLegal 的列... 我希望它成为新的主键,成为可索引的,对于已经添加的记录,我需要用以下值更新它们:1、2、3、4....直到最后一行...

我正在开始查询,但我不知道如何继续...

ALTER TABLE DatosLegales DROP PRIMARY KEY;
ALTER TABLE DatosLegales ADD IdDatoLegal int;
//I guess here goes where update every row's IdDatoLegal
//Then when I specify that IdDatoLegal is indexable for future inserts
//and finally when I specify that IdDatoLegal is the new primary key

我希望你能帮助我。

【问题讨论】:

  • 创建另一个表,然后将旧表复制到其中。
  • 我可以给你一个小费。如果是 SQL Server,可以使用 SQL Management studio 修改表,但不保存实际的修改。然后,如果您打开表设计器 -> 生成更改脚本,它将显示用于修改表的 SQL 脚本。对于复杂的更改,它将生成一个临时表。这是节省时间的好方法,因为管理工作室会为你做所有的脏活
  • 请用特定的 SQL 实现标记您的问题,而不仅仅是“sql”。这是一个实现可能不同的领域。

标签: sql for-loop primary-key create-table alter


【解决方案1】:

试试这个:

declare @sql nvarchar(max)

select @sql = 'alter table DatosLegales drop constraint ' + quotename(name)
from sys.indexes 
where object_id = object_id('DatosLegales')
and index_id = 1

exec(@sql)

alter table  DatosLegales
add IdDatoLegal bigint not null identity(1,1) 
constraint pk_DatosLegales primary key clustered

select * from DatosLegales

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-26
    • 2017-08-25
    • 2017-02-20
    • 1970-01-01
    • 1970-01-01
    • 2019-10-09
    相关资源
    最近更新 更多