73

すべてのテーブルの制約、各テーブルの制約の数を取得し、制約のないテーブルを表示するクエリのフレームを作成するのを手伝ってもらえますNULLか。

これは私がこれまでに持っているものです:

Select  SysObjects.[Name] As [Constraint Name] ,
        Tab.[Name] as [Table Name],
        Col.[Name] As [Column Name]
From SysObjects Inner Join 
(Select [Name],[ID] From SysObjects) As Tab
On Tab.[ID] = Sysobjects.[Parent_Obj] 
Inner Join sysconstraints On sysconstraints.Constid = Sysobjects.[ID] 
Inner Join SysColumns Col On Col.[ColID] = sysconstraints.[ColID] And Col.[ID] = Tab.[ID]
order by [Tab].[Name] 
4

6 に答える 6

121

現在のsysカタログ ビューを使用する必要があります (SQL Server 2005以降を使用している場合、sysobjectsビューは非推奨であり、使用を避ける必要があります) 。カタログ ビューに関する詳細な MSDN SQL Server Books Online のドキュメントをこちらで確認してください。

あなたが興味を持っているかもしれないかなりの数のビューがあります:

  • sys.default_constraints列のデフォルトの制約
  • sys.check_constraints列のチェック制約用
  • sys.key_constraintsキー制約 (主キーなど)
  • sys.foreign_keys外部キー関係

他にもたくさんあります- ぜひチェックしてください!

これらのビューをクエリおよび結合して、必要な情報を取得できます。たとえば、テーブル、列、およびそれらに定義されているすべてのデフォルトの制約が一覧表示されます。

SELECT 
    TableName = t.Name,
    ColumnName = c.Name,
    dc.Name,
    dc.definition
FROM sys.tables t
INNER JOIN sys.default_constraints dc ON t.object_id = dc.parent_object_id
INNER JOIN sys.columns c ON dc.parent_object_id = c.object_id AND c.column_id = dc.parent_column_id
ORDER BY t.Name
于 2013-01-09T06:17:52.830 に答える
4
SELECT
    [oj].[name] [TableName],
    [ac].[name] [ColumnName],
    [dc].[name] [DefaultConstraintName],
    [dc].[definition]
FROM
    sys.default_constraints [dc],
    sys.all_objects [oj],
    sys.all_columns [ac]
WHERE
    (
        ([oj].[type] IN ('u')) AND
        ([oj].[object_id] = [dc].[parent_object_id]) AND
        ([oj].[object_id] = [ac].[object_id]) AND
        ([dc].[parent_column_id] = [ac].[column_id])
    )
于 2014-07-02T10:56:24.487 に答える