SQL插入数据遇Msg 102语法错误,如何修复日期格式问题?
问题修复方案
错误原因分析
set dateformat语法错误:你写的set dateformat yyyy-mm-dd;不符合SQL Server语法规范,dateformat的参数只能是日期部分的顺序标识(如ymd、mdy、dmy),不能带分隔符的完整格式字符串,这直接导致了语法错误提示Incorrect syntax near '-'。- 无效日期值:第6条数据的
shipped_date字段值为'2016-01-53',1月份不存在53号,属于非法日期,即使修复语法错误,插入操作也会失败。
修正后的SQL代码
-- 正确设置日期格式顺序为年-月-日 set dateformat ymd; insert into orders(order_id, customer_id, order_status, order_date, required_date, shipped_date, store_id, staff_id) Values (1, 259, 4, '2016-01-01', '2016-01-03', '2016-01-03', 1, 2), (2, 1212, 4, '2016-01-01', '2016-01-04', '2016-01-03', 2, 6), (3, 523, 4, '2016-01-02', '2016-01-05', '2016-01-03', 2, 7), (4, 175, 4, '2016-01-03', '2016-01-04', '2016-01-05', 1, 3), (5, 1324, 4, '2016-01-03', '2016-01-06', '2016-01-06', 2, 6), -- 修正非法日期为合法值(示例改为2016-01-13,可根据实际需求调整) (6, 94, 4, '2016-01-04', '2016-01-07', '2016-01-13', 2, 6), (7, 324, 4, '2016-01-04', '2016-01-07', '2016-01-05', 2, 6), (8, 1204, 4, '2016-01-04', '2016-01-05', '2016-01-05', 2, 7), (9, 60, 4, '2016-01-05', '2016-01-08', '2016-01-08', 1, 2), (10, 442, 4, '2016-01-05', '2016-01-06', '2016-01-06', 2, 6), (11, 1326, 4, '2016-01-05', '2016-01-08', '2016-01-07', 2, 7); select order_id, customer_id, order_status, order_date, required_date, shipped_date, store_id, staff_id from orders
额外说明
如果你使用的是SQL Server,其实'yyyy-mm-dd'属于ISO标准日期格式,无需手动设置dateformat也能被正确解析,因此也可以直接删除set dateformat语句,只修正非法日期值即可。
内容的提问来源于stack exchange,提问作者Breanna Bloomquist
相关产品推荐
相关产品推荐

