2012-12-14 43 views
0

我现在所拥有的这个表...如何在表中添加列,然后将其转换为主键列并在SQL上添加值?

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 

我希望你能帮助我。

+0

创建一个表,然后复制旧进去。 – Kermit

+0

我可以给你一个小费。如果是SQL Server,则可以使用SQL Management Studio修改表,但不保存实际更改。然后,如果您打开表设计器 - >生成更改脚本,它将向您显示它将用于修改表的SQL脚本。对于复杂的更改,它将生成临时表。这是节省时间的好方法,因为管理工作室会为您做所有肮脏的工作 – cha

+0

请使用特定的SQL实现标记您的问题,而不仅仅是“sql”。这是一个实现可能不同的领域。 – Barmar

回答

0

试试这个:

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 
相关问题