SQL Server:通过查询找出列的默认值

Posted

技术标签:

【中文标题】SQL Server:通过查询找出列的默认值【英文标题】:SQL Server: Find out default value of a column with a query 【发布时间】:2010-09-29 00:03:21 【问题描述】:

如何使用 SQL 查询找出表中列的默认值?

通过使用这个存储过程:

sp_columns @tablename 

我获得了一些关于特定表的列的信息,但缺少列的默认值,我该如何获取?

【问题讨论】:

【参考方案1】:

您可以使用以下内容找到存储的定义(请记住调整列和表名称以找到与您的环境相关的名称!)

SELECT object_definition(default_object_id) AS definition
FROM   sys.columns
WHERE  name      ='colname'
AND    object_id = object_id('dbo.tablename')

【讨论】:

这在 sql server 2008 上对我没有任何回报...而且我知道我的架构/表/字段名称是正确的,并且确实存在默认值。 @Amalgovinus 它绝对有效。您是否在正确的数据库上下文中运行它?您运行查询的帐户是否有足够的权限来查看定义? 是的,我没有权限。在其他情况下,Mssql 足够“好”,可以告诉您无法访问 sysobjects 等内容,但在这种情况下,它只是假装如果您没有使用您拥有权限的数据库,就没有什么可显示的.我必须为此设置一个默认数据库才能正常工作。 ***.com/questions/362434/…【参考方案2】:

我像这样使用INFORMATION_SCHEMA 表:

SELECT 
    TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, COLUMN_DEFAULT
FROM
    INFORMATION_SCHEMA.COLUMNS
WHERE
  TABLE_SCHEMA = @SchemaName 
  AND TABLE_NAME = @TableName
  AND COLUMN_NAME = @ColumnName;

【讨论】:

【参考方案3】:

用途:

   SELECT so.name AS table_name, 
          sc.name AS column_name, 
          sm.text AS default_value
     FROM sys.sysobjects so
     JOIN sys.syscolumns sc ON sc.id = so.id
LEFT JOIN sys.syscomments sm ON sm.id = sc.cdefault
    WHERE so.xtype = 'U' 
      AND so.name = @yourtable
 ORDER BY so.[name], sc.colid

【讨论】:

以上是关于SQL Server:通过查询找出列的默认值的主要内容,如果未能解决你的问题,请参考以下文章

如何在 sql server 中设置外键列的默认值?

如何从数据库查询各表中所有存在默认值的字段

sql server 2005数据库中表B以表A为外键,那么表B中的某一列的默认值能用表A的某一列吗?

sql server where 字段 is null 的问题

如何获取所有 SQL Server 默认值和规则的名称

sql server中默认值约束是啥意思啊,是否就是在创建表的时候在列下面设置默认值吗?