SQL用于定义“TABLE”约束的语法不正确

时间:2013-02-20 05:20:29

标签: sql

我每次尝试超越查询时都会遇到此错误。我多次检查任何语法错误,但我找不到任何。

Msg 142, Level 15, State 2, Line 0
Incorrect syntax for definition of the 'TABLE' constraint. 

CREATE TABLE "hold" (
    timePutOnHold TIME(7),
    customer_id VARCHAR(13),REFERENCES "Customer",
    isbn VARCHAR(13) REFERENCES "Item_Details",
    PRIMARY KEY (customer_id, isbn, timePutOnHold)
)

解决了!我必须在customer_id VARCHAR(13)

之后删除逗号

2 个答案:

答案 0 :(得分:3)

  

customer_id VARCHAR(13),参考“客户”,

数据类型和REFERENCES关键字之间的逗号可能导致语法错误。

一般来说,最好为约束赋予有意义的名称,以便以后可以轻松删除它们。

CREATE TABLE hold 
( 
   timeputonhold TIME(7), 
   customer_id   VARCHAR(13), 
   isbn          VARCHAR(13), 
   CONSTRAINT pk_hold PRIMARY KEY (customer_id, isbn, timeputonhold), 
   CONSTRAINT fk_hold_customer FOREIGN KEY (customer_id) REFERENCES customer(customer_id), 
   CONSTRAINT fk_hold_isbn FOREIGN KEY (isbn) REFERENCES item_details(isbn) 
) 

答案 1 :(得分:1)

请注意,DEFAULT约束在CREATE TABLE语句中的语法方面有所不同。

如果没有逗号分隔符,CONSTRAINT将引用前一列。

-- correct syntax for adding a default constraint to a CREATE TABLE statement    
IsAvailable BIT NOT NULL CONSTRAINT d_IsAvailable DEFAULT(1)

但是,使用逗号分隔和键字DEFAULT FOR将产生相同的错误消息。

-- incorrect syntax for adding a default constraint to a CREATE TABLE statement
IsAvailable BIT NOT NULL
, CONSTRAINT d_IsAvailable DEFAULT(1) FOR IsAvailable

这种细微差别可能很棘手,因为CONSTRAINT constraint_name DEFAULT(constraint) FOR column_name对于ALTER TABLE语句是正确的。

进一步阅读:
Declaring a default constraint when creating a table
Specify Default Values for Columns