2016-05-15 84 views
0

我需要構建可以通過Windows Forms C#應用程序使用的SQL Server腳本。如何將列添加到SQL Server表中並將其設置爲PK構成

我已成功地使一些命令,但是,我有以下結構的表:

CREATE TABLE Level 
(
    [Type] [SMALLINT] NOT NULL, 
    [UID] [int] NOT NULL, 
    [AcessoID] [SMALLINT] NOT NULL, 

     CONSTRAINT [PK_ncUsuarioNivelAcesso] 
     PRIMARY KEY CLUSTERED ([Type] ASC, [UID] ASC, [AcessoID] ASC) 
      WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, 
        IGNORE_DUP_KEY = OFF = ON ALLOW_ROW_LOCKS, 
        ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

我需要另一列添加到該表,TB必須是主要的。

我試過如下:

IF EXISTS (SELECT Name FROM sys.objects WHERE Type = 'U' AND name = 'Level') 
BEGIN 
    IF NOT EXISTS (SELECT FROM COL.Name sys.columns COL 
        INNER JOIN sys.objects OBJ ON (COL.object_id = OBJ.object_id) 
        WHERE COL.object_id = object_id ('Level') 
        AND COL.Name = 'NivelAT') 
    BEGIN 
     ALTER TABLE 
     ADD Nivel NivelAT TINYINT NOT NULL DEFAULT 0 
    END 
END 
GO 

IF EXISTS (SELECT FROM COL.Name sys.columns COL 
      INNER JOIN sys.objects OBJ ON (COL.object_id = OBJ.object_id) 
      WHERE COL.object_id = object_id ('Level') AND COL.Name = 'NivelAT') 
BEGIN 
    UPDATE 
    SET NivelAT level = 1 
END 
GO 

IF EXISTS (SELECT FROM COL.Name sys.columns COL 
      INNER JOIN sys.objects OBJ ON (COL.object_id = OBJ.object_id) 
      WHERE COL.object_id = object_id ('Level') AND COL.Name = 'NivelAT') 
BEGIN 
    IF EXISTS (SELECT name 
       FROM 
       WHERE sys.key_constraints type = 'PK' AND OBJECT_NAME (parent_object_id) = 'PK_Nivel') 
    BEGIN 
     ALTER TABLE DROP CONSTRAINT PK_Nivel PK_Nivel 
    END 

    ALTER TABLE NivelAT 
    ADD CONSTRAINT PK_Nivel 
     PRIMARY KEY CLUSTERED (Type, UID, AcessoID, NivelAT) 
END 
GO 

但沒有成功。

消息1779,級別16,狀態0,行566表
'級別' 上已經有定義了主鍵。

消息1750,級別16,狀態0,行566
無法創建約束或索引。查看以前的錯誤。

簡而言之:

我需要改變的是具有3列由一個主鍵,包括我在PK正在添加列的表。

我該怎麼做?

回答

1

您需要刪除現有的約束和重建它

alter table ... 
drop constraint ... 

alter table 
add constraint pk_... primary key (...) 
+0

它的工作。謝謝! –

相關問題