【发布时间】:2011-01-21 05:12:45
【问题描述】:
这听起来像是一个疯狂的请求。我报告的数据库没有任何外键,每个主键都是一个身份列。这使得使用 TOAD 等工具变得困难,因为 Intellisense 通过读取 PK 和 FK 关系来工作。
任何人都有一个脚本可以从数据库中的每个表中删除主键,以便我可以用“正确”的 PK 替换它们并添加 FK 以帮助报告?
为了阻止“不要这样做!!!”的雪崩回复,让我明确表示我不会对我的生产数据库执行此操作,而是将其复制到另一台服务器上。
任何建议将不胜感激。
------- 编辑这是用正确的信息更新的。 ----------------
谢谢大家,但我意识到我犯了一个错误。几乎每个表都有一个具有标识属性的“identity_column”。该标识是一个聚集索引。但是,它没有被指定为主键。
首先,主键和聚集索引有什么区别?
其次,如何编写出所有聚集索引的脚本? 这行得通吗?
SELECT
'ALTER TABLE ' + OBJECT_NAME(OBJECT_ID) + ' DROP CONSTRAINT ' + name
FROM sys.indexes WHERE type_desc = 'CLUSTERED'
感谢您的耐心等待
【问题讨论】:
-
为什么要删除聚集索引?这将导致对每一行进行完全重写!
-
我的问题是这个。我的数据库没有主键,只有聚集索引。我正在编写一个脚本来获取数据库的报告副本,并将适当的 PK 和 FK 关系放入其中,以促进 TOAD 和 SSRS 的报告。由于这会在停机期间发生,并且我将在总表的一小部分上执行它,因此我认为性能损失并不重要。
标签: tsql sql-server-2000 constraints information-schema