2012-12-14 83 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 
相關問題