【问题标题】:Sql Server - Get database constraints of all tables ( default and check constraints)Sql Server - 获取所有表的数据库约束(默认和检查约束)
【发布时间】:2019-07-24 09:48:23
【问题描述】:

我需要像这样获取数据库结果中所有列、表的约束:

DatabaseName | SchemaName | TableName | ColumnName | ColumnType | ConstraintName |

-

ConstraintType | Definition | CreateDate

我已经使用了这个answer,但它只显示了 TableName、ColumnName、ConstraintName 和定义。

我使用的答案:

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

感谢您的帮助。

【问题讨论】:

  • 那么是什么阻止您将这些额外的列添加到您的查询中?例如,sys.columns 有一个列 system_type_id 和 user_type_id,还有一个名为 sys.types 和 sys.systypes 的对象也就不足为奇了。
  • @Larnu 我想要那些列的默认约束和检查约束我有问题到达那些。

标签: sql sql-server tsql select


【解决方案1】:

这可能会有所帮助..

USE AdventureWorks2014
GO
;WITH ContraintDetails 
AS(

--DEFAULT_CONSTRAINT
SELECT  
    i.TABLE_CATALOG DatabaseName ,
    schema_name(t.schema_id) SchemaName,
    t.[name] TableName,   
    c.name as ColumnName,
    i.DATA_TYPE ColumnType,
    con.type_desc ConstantType,
    con.[name] ConstantName,
    col.[name] + ' : ' + con.[definition] Details
FROM sys.default_constraints con
INNER JOIN sys.objects t on con.parent_object_id = t.object_id
INNER JOIN sys.all_columns col on con.parent_column_id = col.column_id and con.parent_object_id = col.object_id
INNER JOIN sys.columns c ON col.object_id = c.object_id AND col.column_id = c.column_id
INNER JOIN INFORMATION_SCHEMA.COLUMNS i ON c.name = i.COLUMN_NAME

UNION ALL

--CHECK_CONSTRAINT
SELECT 
    i.TABLE_CATALOG DatabaseName ,
    schema_name(t.schema_id) SchemaName,
    t.[name] TableName,  
    c.name as ColumnName,
    i.DATA_TYPE ColumnType,
    con.type_desc  ConstraintType,
    con.[name] as constraint_name,
    con.[definition] Details
FROM sys.check_constraints con
INNER JOIN sys.objects t on con.parent_object_id = t.object_id
INNER JOIN sys.all_columns col on con.parent_column_id = col.column_id and con.parent_object_id = col.object_id
INNER JOIN sys.columns c ON col.object_id = c.object_id AND col.column_id = c.column_id
INNER JOIN INFORMATION_SCHEMA.COLUMNS i ON c.name = i.COLUMN_NAME

)
SELECT * FROM ContraintDetails
WHERE TableName = 'Employee' --AND  ColumnName = 'BirthDate'
ORDER BY TableName,ColumnName

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多