在SQL Server中使用time类型插入时间时遇语法错误求助
解决SQL插入语句的':'语法错误问题
嘿,我来帮你搞定这个报错问题!你遇到的':'附近语法错误,核心原因是时间和日期值没有用单引号包裹,SQL没法正确解析13:30这种写法,把它当成了数字加非法符号。除此之外,还有几个小细节需要调整,才能顺利插入数据:
必须修正的几个点:
- 字符/日期/时间类型值加单引号:像
Slot_ID(CHAR类型)、Slot_Time、Slot_Date,还有所有外键字段(Lecturer_ID、Student_ID等)都是字符/日期类型,必须用单引号把值括起来,不然SQL会把它们当成数字或语法符号。 - 日期格式用标准写法:SQL Server默认认
YYYY-MM-DD格式,你写的1-28-2018容易产生歧义,改成2018-01-28更稳妥。 - 字段长度匹配:
Lecturer_ID定义的是CHAR(3),你插的1111是4位,会触发长度错误,得改成3位的有效值比如111。 - 拼写修正:
avaliable应该是available,虽然这不是语法错误,但会导致状态值不符合预期哦。
修正后的完整INSERT语句:
INSERT INTO Consultation_Slot VALUES ( '1000000', -- Slot_ID CHAR(7) 用单引号包裹 'I need to learn maths', 'available', -- 修正拼写错误 '', '13:30', -- time(7) 类型加单引号,简写也能被识别 '2018-01-28', -- 标准日期格式 'Sunday', 'RN001', '111', -- 符合Lecturer_ID CHAR(3)的长度要求 '880001', '30001' ); GO
进阶优化建议:
建议在INSERT语句里显式指定字段列表,这样即使以后表结构有变动,这条语句也不容易出错,示例如下:
INSERT INTO Consultation_Slot ( Slot_ID, Appointment_Purpose, Appointment_Status, Cancellation_Reason, Slot_Time, Slot_Date, Slot_Day, Room_No, Lecturer_ID, Student_ID, Schedule_ID ) VALUES ( '1000000', 'I need to learn maths', 'available', '', '13:30', '2018-01-28', 'Sunday', 'RN001', '111', '880001', '30001' ); GO
内容的提问来源于stack exchange,提问作者Mango
相关产品推荐
相关产品推荐

