两个查询都相同吗?

时间:2015-03-24 19:12:43

标签: sql sql-server-2008

我很困惑这些查询是否相同?有什么区别?

ALTER TABLE agent1   
MODIFY commission DEFAULT .05; 

ALTER TABLE agent1
add constraint myconst default(commission=0.05) 

1 个答案:

答案 0 :(得分:1)

您的语法可能来自MySQL或Oracle。在SQL Server中,这些是向现有列添加约束的两种方法:

(摘自Command for adding a default constraint

    ALTER TABLE [Common].[PropertySetting] 
             ADD DEFAULT ((1)) FOR [Active];
    ALTER TABLE [Common].[PropertySetting] 
             ADD CONSTRAINT [DF_PropertySetting_Active] 
             DEFAULT ((1)) FOR [Active];

如果您没有提供约束名称,SQL Server将为您创建一个。

这将列出表x8的所有约束:

SELECT OBJECT_NAME(object_id) AS Name,
       SCHEMA_NAME(schema_id) AS  [Schema] ,
       [type_desc] AS [Type]
FROM [sys].[objects]
WHERE [type_desc] LIKE '%CONSTRAINT' AND OBJECT_NAME(parent_object_id)='x8'

Constraint                      Schema      Type
    DF_x8_name                  dbo         DEFAULT_CONSTRAINT
    DF_x8_date1                 dbo         DEFAULT_CONSTRAINT
    DF__x8__x6__117F9D9         dbo         DEFAULT_CONSTRAINT
    DF_PropertySetting_Active   dbo         DEFAULT_CONSTRAINT
    t55                         dbo         CHECK_CONSTRAINT

您可以猜测每个约束(第三个除外)在创建时都被明确命名。 SQL Server创建了第三个名称。

您可以使用内置系统视图通过发出以下命令获取所有检查和/或默认约束的列表:

select * from sys.check_constraints 
 or
select * from sys.default_constraints