0

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

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) 之后删除逗号

4

2 回答 2

4

customer_id VARCHAR(13),REFERENCES "客户",

数据类型和 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) 
) 
于 2013-02-20T05:32:04.003 回答
3

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

如果没有逗号分隔符,则 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 语句是正确的。

进一步阅读:
在创建表时声明默认约束
为列指定默认值

于 2016-12-02T16:24:25.560 回答