当我创建这样的表时
CREATE TABLE Test
(TestId INT IDENTITY(1,1) NOT NULL,
FName VARCHAR(255) NOT NULL,
LName VARCHAR(255) NOT NULL,
CONSTRAINT PK_TestID PRIMARY KEY(TestId))
SQL Server 创建与主键相关的一个 insys.key_constraints
和一个 in sys.indexes
。从运行下面的查询可以看出,在创建表之前和之后。
SELECT Count(*)
FROM
sys.key_constraints
SELECT Count(*)
FROM
sys.indexes
WHERE
object_id IN (SELECT object_id
FROM
sys.objects
WHERE
type_desc = 'USER_TABLE')
它也使用它们。
当我运行这个
INSERT INTO test
VALUES
('Me', 'You')
执行计划显示Clustered Index Insert
。
但是当我放弃约束时
ALTER TABLE Test
DROP CONSTRAINT PK_TestID
GO
然后运行上面的查询2个查询,它的sys.key_constraints
计数比它所拥有的少1,如果它正是它应该是的。但是sys.indexes
仍然有相同的计数,尽管当我运行它时
SELECT *
FROM
sys.indexes
WHERE
object_id IN (SELECT object_id
FROM
sys.objects
WHERE
type_desc = 'USER_TABLE')
AND
object_id = object_id(N'Test')
ORDER BY
[name]
name
设置为NULL
和index_id
0。但是为什么不像我们对中的那一行所做的那样删除它呢sys.key_constraint
?