我试图测试给定的默认约束是否存在.我不想使用sysobjects表,而是使用更标准的信息_模式.

我以前用它来判断表和主键约束,但我在任何地方都看不到默认约束.

他们不在吗?(我使用的是MS SQL Server 2000).

编辑:我想知道约束的名称.

推荐答案

据我所知,默认值约束不是ISO标准的一部分,因此它们不会出现在信息模式中.信息模式似乎是此类任务的最佳 Select ,因为它是跨平台的,但如果信息不可用,则应使用对象目录视图(sys.*),而不是SQL Server 2005及更高版本中不推荐的系统表视图.

以下内容与@user186476的答案基本相同.它返回给定列的默认值约束的名称.(对于非SQL Server用户,您需要默认的名称才能删除它,如果您不自己命名默认约束,SQL Server会创建一些疯狂的名称,如"DF_TableN_column_95AFE4B5".为了便于将来更改模式,请始终显式命名您的约束!)

-- returns name of a column's default value constraint 
SELECT
    default_constraints.name
FROM 
    sys.all_columns

        INNER JOIN
    sys.tables
        ON all_columns.object_id = tables.object_id

        INNER JOIN 
    sys.schemas
        ON tables.schema_id = schemas.schema_id

        INNER JOIN
    sys.default_constraints
        ON all_columns.default_object_id = default_constraints.object_id

WHERE 
        schemas.name = 'dbo'
    AND tables.name = 'tablename'
    AND all_columns.name = 'columnname'

Sql相关问答推荐

PostgreSQL集群不间断的数据系列

如何在联接条件不匹配时按日期获取上一条记录

前面的语句不喜欢AND LIKE?当try 更新使用ID和日期过滤的表时

retrofit AWS Athena中的JSON

仅 for each 唯一ID返回一个元素,并仅返回最新连接的记录

替换上一个或下一个值中的空值并添加其价格日期

PostgreSQL使用SQL子查询在时间间隔内 Select 数据

对列进行排序后,基于两列删除重复行

每小时 Select 1行

删除行而不使数据库超载

在 Oracle 21c 中透视文本值

复制行并根据 Oracle SQL 中其他表的值更改值

SQL 根据前一天的最大值计算每天的值数

两个具有 NULL 值的表达式结果之间的差异

基于字符串的SQL查询

根据开始时间和结束时间计算has_impact字段

在给定的日期范围内填写缺失的日期

如何计算每行出现的次数并显示在另一个表中?

如何在 RavenDB Studio (RQL) 中插入更新文档

面对来自以下两个代码的不同输出