更改SQL Server中的主键列

时间:2012-01-13 00:22:21

标签: sql sql-server database shared-hosting

更新

以下是查询结果的约束

SELECT * FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_NAME = 'history'

CONSTRAINT_NAME   COLUMN_NAME  ORDINAL_POSITION
PK_history        userKey       1
PK_history        name          2

以下是查询的结果

SELECT * 
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS 
WHERE TABLE_NAME = 'history'

CONSTRAINT_NAME   CONSTRAINT_TYPE  IS_DEFERRABLE  INITIALLY_DEFERRED
PK_history        PRIMARY KEY      NO             NO

END UPDATE

我的主机通过ASP.NET企业管理器为我的SQL Server数据库提供了一个接口。

我的history表中有3列:

  • userId(key,int,NULL not allowed)
  • name(密钥,字符串,不允许NULL)
  • id(不是key,int,允许NULL)

我想让id列成为唯一的密钥。

要做到这一点,我相信我需要:

  1. 确保该列中的任何行
  2. 都没有NULL
  3. 将列设置为不允许NULL
  4. 将列添加为主键
  5. 删除其他2列作为键
  6. 但是,当我使用提供的UI时,它永远不会起作用。有时它看起来只是尝试做某事但是当我刷新列的视图时它永远不会改变。它偶尔会创建一个临时表,看起来它试图执行某些操作,但永远不会被复制/覆盖我正在尝试更改的原始表。

    当我尝试使用查询时,更改也不会显示。以下是我认为我需要的查询:

        SELECT * from history WHERE id is NULL     <---- This shows 0 results
    
        ALTER TABLE history
        ALTER COLUMN id int NOT NULL
    
        ALTER TABLE history ADD PRIMARY KEY (id)
    
        ALTER TABLE history
        DROP CONSTRAINT userId
        DROP CONSTRAINT name
        GO
    

    我只是试图禁止NULL并为id列添加主键。它似乎不起作用。有人能指出我正确的方向吗?谢谢!

2 个答案:

答案 0 :(得分:68)

假设您当前的主键约束名为pk_history,您可以替换以下行:

ALTER TABLE history ADD PRIMARY KEY (id)

ALTER TABLE history
DROP CONSTRAINT userId
DROP CONSTRAINT name

用这些:

ALTER TABLE history DROP CONSTRAINT pk_history

ALTER TABLE history ADD CONSTRAINT pk_history PRIMARY KEY (id)

如果您不知道PK的名称,可以使用以下查询找到它:

SELECT * 
  FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS 
 WHERE TABLE_NAME = 'history'

答案 1 :(得分:1)

Necromancing。
看起来你和我一样有一个好的架构...... 以下是如何正确执行此操作:

在此示例中,表名为dbo.T_SYS_Language_Forms,列名为LANG_UID

.ui-front{z-index:0 !important; } 
.ui-selectmenu-open {z-index:9999 !important;}