2014-07-06 77 views
3

我应该改变我目前的命名成员表在Microsoft SQL Server 2012添加多个约束在一个声明中

我试图修改表

ALTER TABLE MEMBER 
ADD CONSTRAINT U_MEMBERID UNIQUE(MEMBER_ID), primary key (MEMBER_ID); 
ADD CONSTRAINT Sys_date DEFAULT GETDATE() FOR MEMBER_ID; 

以上不工作,它说:

消息156,15级,状态1,第3行
附近关键字 '约束' 的语法不正确。

我想我做错了什么,但我不确定它是什么。

ALTER TABLE TITLE 
ADD CONSTRAINT U_TITLEID UNIQUE(TITLE_ID), primary key (TITLE_ID); 
add constraint C_CATEGORY CHECK(CATEGORY='DRAMA' OR 'COMEDY' OR 'ACTION' 
OR 'CHILD' OR 'SCIFI' OR 'DOCUMENTARY'; 

另外:是能够将上述代码添加到码之前它并以相同的SQL查询执行两者?

我该如何解决这个问题?

+0

最后一位可能是一个问题(“是否可以在一个SQL查询中的不同表上执行两个DDL语句?”)。 – Jeroen

回答

4

你有三个问题:

  1. 您终止与;的声明在你的代码第二行的末尾。
  2. 您在最后一条语句中有FOR MEMBER_ID,这可能应该是FOR Sys_date
  3. 您重复ADD,但don't have to

假设该表的结构:

CREATE TABLE Member (MEMBER_ID BIGINT NOT NULL, Sys_date DATETIME); 

这DDL将工作:

ALTER TABLE MEMBER 
ADD CONSTRAINT U_MEMBERID UNIQUE(MEMBER_ID), primary key (MEMBER_ID), 
    CONSTRAINT Sys_date DEFAULT GETDATE() FOR Sys_date; 

this sqlfiddle

可以理论上也可以看到这在MSDN's page on ALTER TABLE,虽然我很容易承认这些规格可能很难阅读。这里是他们是如何解释一个刺:

ALTER TABLE [ database_name . [ schema_name ] . | schema_name . ] table_name 
{ 
    ALTER COLUMN column_name 
    -- Omitted.... 
    | ADD 
    { 
     <column_definition> 
     | <computed_column_definition> 
     | <table_constraint> 
     | <column_set_definition> 
    } [ ,...n ] 
    -- Omitted.... 

ADD关键字出现一次,} [ ,...n ]位告诉你,你可以重复{}括号次n,分离的位。

-1
ALTER TABLE MEMBER ADD CONSTRAINT U_MEMBERID UNIQUE(MEMBER_ID), primary key (MEMBER_ID); 
ALTER TABLE MEMBER ADD CONSTRAINT Sys_date DEFAULT GETDATE() FOR MEMBER_ID;