gpt4 book ai didi

sql - 更改 SQL Server 中的主键列

转载 作者:太空狗 更新时间:2023-10-30 01:37:56 25 4
gpt4 key购买 nike

更新

这是查询结果的约束

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

结束更新

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

我的 history 表中有 3 列:

  • userId(键、整数、不允许为 NULL)
  • name(键、字符串、不允许为 NULL)
  • id(不是 key,int,允许 NULL)

我想让 id 列成为唯一的键。

为此,我认为我需要:

  1. 确保任何行的该列中没有 NULL
  2. 将列设置为不允许 NULL
  3. 将列添加为主键
  4. 删除其他 2 列作为键

但是,当我使用提供的 UI 时,它永远无法工作。有时它看起来像是在尝试做某事,但当我刷新列 View 时它永远不会改变。它偶尔会创建一个临时表,看起来它试图执行某些操作,但它永远不会被复制/覆盖我试图更改的原始表。

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

    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 列添加主键。它似乎不起作用。有人能指出我正确的方向吗?谢谢!

最佳答案

假设您当前的主键约束称为 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'

关于sql - 更改 SQL Server 中的主键列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8844324/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com