UPDATE
以下是查询结果的约束
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 Enterprise Manager 提供了到 SQL Server DB 的接口。
我的目录中有 3 列history
table:
-
userId
(key, int, 不允许为 NULL)
-
name
(键、字符串、不允许为 NULL)
-
id
(不允许 key、int、NULL)
我想让 id 列成为唯一的键。
为此,我认为我需要:
- 确保任何行的该列中都没有 NULL
- 将列设置为不允许 NULL
- 添加列作为主键
- 删除其他 2 列作为键
但是,当我使用提供的 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 列添加主键。这似乎不起作用。有人能指出我正确的方向吗?谢谢!
假设您当前的主键约束名为 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'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)