【发布时间】:2015-02-15 04:12:02
【问题描述】:
我有一个 SQL Server 表,其中有四列,其中一列是默认值为 getdate() 的日期时间列。我有这个表的两个副本,一个在我可以完全控制的开发数据库服务器中,另一个在我几乎没有权限的生产数据库服务器中。
以下是开发表的外观:
我选择了 dtInsert 列。请注意,此列的默认值为 getdate()。我这张表的生产版本是完全一样的。当我向该表添加一行时,dtInsert 单元格默认为getdate(),就像我期望的那样。当数据库管理员生成生产表的脚本时,它包含默认值约束。但是,当我在 SQL Server Management Studio 2012 中查看表设计时,它显示该列没有默认值。见这里:
当我生成数据库图表时,它还显示 dtInsert 列没有默认值。同样,我通过测试知道我的生产数据库服务器中的 dtinsert 列确实默认为getdate()。
这是 SQL Server Management Studio 2012 版中的错误吗?是否有一些我没有的权限会导致这种行为?是别的吗?为什么该列似乎没有默认值,即使它有?
【问题讨论】:
-
我的猜测是权限问题 - 但我不确定哪些权限。我的 google-fu 目前还不够强大。
-
我相信您需要对象的 DDL 权限才能查看默认值。 db_owner 或 db_ddladmin 会这样做。
-
您可以看到列但看不到约束似乎很奇怪?试试这个:
SELECT * FROM sys.default_constraints WHERE [parent_object_id] = OBJECT_ID(N'_table_name_');在两种环境中查看是否存在差异。如果这在 prod 中返回 DEFAULT,那么它可能是 SSMS 的问题。如果没有行,那么它是一个权限,很可能是VIEW DEFINITION -
@srutzky 两个环境之间的定义不同。在生产服务器中是
NULL,在开发服务器中是getdate() -
这不是“不同的”;-)。这意味着您无权查看它。这指向@Kritner 的答案(应该更具体),因为您没有权限对
VIEW DEFINITION使用默认约束,或者可能还有其他对象。
标签: sql-server default-value ssms-2012