回答:
この猫のスキンを作成する方法はいくつかありますが、これはSQL Server 2005以降では問題なく機能します。問題を処理するための簡単な方法です。
このOBJECTPROPERTY()
関数は、テーブルなど、オブジェクトに関するさまざまなプロパティをリストできます。それらのプロパティの1つは、テーブルに主キーがあるかどうかです。
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 ;
あなたが必要とするものを与えるべきです。OBJECTPROPERTY()関数を使用する他のすべての方法については、オンラインブックで確認できます。これは2012年版の記事です。
objectproperty()
2005年から利用可能です、私はbolをチェックしました、そうですか?
マイクのソリューションは、特定の問題に最適です。
あなたはより多くの柔軟性をしたい場合は、ここでは簡単にクエリ変身することができ、代替だ戻って、このようなヒープあるすべてのテーブルを見つけること、または一意の制約がないテーブル見つけるなど、他の情報、すべてのを。
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)
);
(サブ)システムが50個を超えるテーブルを作成したら、すべてのメタデータテーブルに慣れることが非常に重要です。
SQL Server のポリシー管理機能は、これの一部を実行できます。
Tableファセットには、@ HasIndexフィールドと@HasClusteredIndexフィールド(およびトリガーなど、役立つ可能性のある他のフィールド)があります。(中央管理サーバー機能を使用して)複数のサーバーのすべてのデータベースのすべてのテーブルの条件をチェックするポリシーを作成できます。
ただし、主キーインデックスまたは制約の存在を確認することはできません。@HasPrimaryKeyというフィールドがあると誓ったでしょうが、MSSQL2012にはありません。私は覚えていないか、怒っています。
注:ポリシー管理は、SQL Server 2012 Enterprise、Business Intelligence、およびStandardの各エディションに含まれています。Express版ではご利用いただけません。
sys.tables
ますが、関数を使用していると思いましたが、それ自体がIDを提供し、この素晴らしい関数を示してくれてありがとうございます。