【问题标题】:Changes to primary key set on multiple fields in already existing table [duplicate]更改现有表中多个字段的主键集[重复]
【发布时间】:2015-05-19 20:42:27
【问题描述】:

我使用的是sql server 2012 企业版..

我有如下表结构..我需要删除主键并需要将主键添加到它自己的第一列

表结构如下..

 CREATE TABLE [dbo].[ActivationInfo](
    [cert_id] [int] NOT NULL,
    [ActivationKey] [varchar](1800) NULL,
    [Activated_ts] [datetime] NULL,
    [Activated_by] [int] NOT NULL,
    [FLAGGED] [varchar](20) NULL
) ON [PRIMARY]

如何删除已经在多个字段上设置的主键,之后我只需要为 cert_id 放置主键

有人可以帮忙吗..

【问题讨论】:

    标签: sql-server sql-server-2008 sql-server-2012


    【解决方案1】:

    这很简单。 Change Primary Key to Composite Key (Primary Key already exists)的重复,只是颠倒想要的目标。

    ALTER TABLE ActivationInfo 
    DROP CONSTRAINT CompositeKeyNameGoesHere, 
    
    ALTER TABLE ActivationInfo 
    ADD CONSTRAINT pk_CertID PRIMARY KEY (cert_id)
    

    【讨论】:

      【解决方案2】:

      要放弃使用这个结构:(如果你知道表名)

      DECLARE @tablename VARCHAR(100) = 'ActivationInfo'
      
      SELECT 'alter table ' + @tablename
             + ' drop constraint ' + name
      FROM   sys.objects
      WHERE  type = 'pk'
             AND parent_object_id = Object_id(@tablename) 
      

      添加主键:

      ALTER TABLE [dbo].[ActivationInfo] ADD CONSTRAINT PK_ActivationInfo_cert_id PRIMARY KEY(cert_id)
      

      【讨论】:

        【解决方案3】:

        这可以通过删除主键约束然后添加一个新约束来实现。

        首先您需要使用以下代码识别主键约束的名称:

        SELECT CONSTRAINT_NAME
          FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS 
          WHERE TABLE_NAME = 'ActivationInfo' AND CONSTRAINT_TYPE = 'PRIMARY KEY'
        

        然后您只需删除并替换密钥:

        ALTER TABLE ActivationInfo DROP CONSTRAINT **EXISTING NAME**
        ALTER TABLE ActivationInfo ADD CONSTRAINT pk_ActivationInfo PRIMARY KEY (cert_id)
        

        【讨论】:

          猜你喜欢
          • 2011-03-31
          • 1970-01-01
          • 2013-04-01
          • 2020-09-01
          • 1970-01-01
          • 2015-11-23
          • 1970-01-01
          • 2023-03-10
          • 2013-01-21
          相关资源
          最近更新 更多