1

为什么 SQL Server 2012 报告的“for”附近有语法错误?

DEFAULT FOR 语法在创建表时不可用,但在更改时可用?这是一个关于更改表和添加默认约束链接的教程,但是在创建它时我无法正确使用它。

CREATE TABLE Meal (
    MealID int IDENTITY PRIMARY KEY,
    MealName varchar(50) NOT NULL,
    IsVege char NOT NULL,
    MealDescription varchar(150) NOT NULL,

    CONSTRAINT Ckh_Meal_IsVege
        CHECK (IsVege in ('t', 'f')),
    CONSTRAINT Def_Meal_IsVege
        DEFAUlT ('t') FOR IsVege,
);
4

3 回答 3

4

在列定义之后立即添加它并丢失FOR

IsVege char NOT NULL CONSTRAINT Def_Meal_IsVege DEFAULT 't'

在这里提琴

于 2014-04-29T14:03:44.880 回答
2

根据StuartLC 的回答CREATE TABLE,您只能DEFAULT内联声明约束,这是语法的一个怪癖。您可以创建表约束,但这些只是:

< table_constraint > ::=
[ CONSTRAINT constraint_name ] 
{ 
    { PRIMARY KEY | UNIQUE } 
        [ CLUSTERED | NONCLUSTERED ] 
        (column [ ASC | DESC ] [ ,...n ] ) 
        [ 
            WITH FILLFACTOR = fillfactor 
           |WITH ( <index_option> [ , ...n ] ) 
        ]
        [ ON { partition_scheme_name (partition_column_name)
            | filegroup | "default" } ] 
    | FOREIGN KEY 
        ( column [ ,...n ] ) 
        REFERENCES referenced_table_name [ ( ref_column [ ,...n ] ) ] 
        [ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ] 
        [ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ] 
        [ NOT FOR REPLICATION ] 
    | CHECK [ NOT FOR REPLICATION ] ( logical_expression ) 
} 
于 2014-04-29T14:06:05.070 回答
0
CREATE TABLE Meal (
    MealID int IDENTITY PRIMARY KEY,
    MealName varchar(50) NOT NULL,
    IsVege char NOT NULL,
    MealDescription varchar(150) NOT NULL,
 CONSTRAINT [PK_Meal] PRIMARY KEY CLUSTERED 
(
    [MealID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]


ALTER TABLE [dbo].[Meal] ADD  CONSTRAINT [Ckh_Meal_IsVege]  DEFAULT (('f')) FOR [IsVege]
GO
ALTER TABLE [dbo].[Meal] ADD  CONSTRAINT [Def_Meal_IsVege]  DEFAULT (('t')) FOR [IsVege]
GO
于 2014-04-29T14:07:48.040 回答