Pro*_*ofK 10 sql-server primary-key sql-server-2012
Google 搜索在如何查找没有聚集索引的表上产生了数百万次点击,PK 通常是表的聚集索引。然而,一个表很容易有一个自然键作为聚集索引,和一个非聚集代理索引,如标识列。
如何在没有定义主键的情况下查找数据库中的所有表?我在这个数据库中有 245 个表:手动检查效率非常低。
Mik*_*lsh 13
给这只猫剥皮的几种方法,但这在 SQL Server 2005 及更高版本中运行良好,我发现这是一种处理问题的无痛方法 -
该OBJECTPROPERTY()
函数可以列出有关对象的各种属性 - 如表格。这些属性之一是表是否具有主键。
OBJECTPROPERTY(object_id, tablehasprimarykey)
= 0 将是一个没有主键的表。
所以
SELECT OBJECT_SCHEMA_NAME( object_id ) as SchemaName, name AS TableName
FROM sys.tables
WHERE OBJECTPROPERTY(object_id,'tablehasprimaryKey') = 0
ORDER BY SchemaName, TableName ;
Run Code Online (Sandbox Code Playgroud)
应该给你你需要的。您可以在在线书籍中看到有关使用 OBJECTPROPERTY() 函数的所有其他方法。这是文章的2012 版。
Mike 的解决方案非常适合特定问题。
如果你想要更多的灵活性,这里是一个可以很容易演变成一个查询的替代方案,返回其他信息,如发现有堆所有表,或发现没有唯一约束的表在所有。
SELECT
OBJECT_SCHEMA_NAME(t.object_id) AS SchemaName,
t.name AS TableName
FROM sys.tables t
WHERE
NOT EXISTS
(
SELECT *
FROM sys.indexes i
WHERE
(i.object_id = t.object_id) AND
(i.is_primary_key = 1)
);
Run Code Online (Sandbox Code Playgroud)
一旦您的(子)系统超过约 50 个表,熟悉所有元数据表就非常重要,因为正如您所说,手动浏览每个表是不切实际的(并且容易出错!)。
归档时间: |
|
查看次数: |
1296 次 |
最近记录: |