执行OrderDetails建表SQL报错:'CONSTRAINT'关键字附近语法错误
错误原因
报错由两个问题共同触发:
Discount字段的decimal类型未指定精度、小数位数。在SQL Server 2005及更早版本、老版本Access等环境中,解析器默认decimal关键字后必须跟随括号填写精度参数,会持续向后读取内容尝试匹配括号,无法判定当前字段定义已结束- 低版本数据库不支持表定义列表的尾随逗号语法,字段解析逻辑异常时,读到后续
CONSTRAINT关键字就会直接抛出语法错误。
修复方法
- 为
decimal类型明确指定匹配业务的精度和小数位数,折扣场景通用配置为decimal(4,2),支持0.00~99.99的取值范围,完全满足业务需求 - 保留最后一个字段和主键约束之间的半角逗号(符合标准SQL的表元素分隔规则),不要额外添加无意义的尾随逗号
修正后可正常执行的建表代码:
Create Table OrderDetails ( OrderID smallint, ProductID smallint, UnitPrice money, Quantity smallint, Discount decimal(4,2), CONSTRAINT OrderDetails_OID_PID_pk PRIMARY KEY (OrderID, ProductID) );
内容的提问来源于stack exchange,提问作者sid keshwani
相关产品推荐
相关产品推荐

