SQL Server:使用查询查找列的默认值

50

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

可以使用以下存储过程:

sp_columns @tablename 

我得到了某个表的列信息,但这些列的默认值缺失了,如何获取这些默认值?

3个回答

85

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

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

1
这在我的SQL Server 2008上没有返回任何内容...我确信我的模式/表/字段名称是正确的,并且确实存在默认值。 - Alkanshel
@Amalgovinus,它绝对有效。您是否在正确的数据库上下文中运行它?您正在运行查询的帐户是否具有足够的权限来查看定义? - Martin Smith
是的,我没有权限。在其他情况下,Mssql会“友好”地告诉你不能访问sysobjects等内容,但在这种情况下,如果你没有使用有权限的数据库,它就会假装没有要显示的内容。我必须设置一个默认数据库才能使其正常工作。 https://dev59.com/EHRC5IYBdhLWcg3wP-n5 - Alkanshel
如果一个varchar的默认值是'',那么它在定义时会返回NULL。 - Dan H.

32

我使用 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;

18

使用:

   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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接