SQL插入语句触发Msg213错误:列值与表定义不匹配,求排查
排查INSERT语句的列不匹配错误(Msg 213)
咱们直接说问题根源:你的Users表一共定义了14个列,但你写的INSERT语句只提供了13个值,而且因为没指定要插入的列名,SQL Server会默认按表的列顺序去匹配,这就直接导致了列数和值的数量不匹配,触发了Msg 213错误。
另外要注意,UserID是自增主键(PK Identity 1,1),这个列的值是数据库自动生成的,不需要你手动插入。
给你两种可行的修复方案:
方案1:明确指定插入的列(推荐)
这种方法可读性强,就算后续表结构调整(比如新增列),也不容易出错。只需要把除了UserID之外的列名列出来,再对应传入值即可:
INSERT INTO Users (TypeID, Email, Password, LastName, FirstName, Street, Municipality, City, Phone, Mobile, Status, DateAdded, DateModified) VALUES (2, 'phil@gmail.com', 'password', 'Reavis', 'Phil', 'Street', 'Municipality', 'City', '1234567', '12345678910', 'Active', '2018-09-09 08:00:00', '2018-01-01 09:00:00');
方案2:用DEFAULT占位自增列
如果不想写列名,可以在VALUES开头加DEFAULT,用来对应UserID的自增值(让数据库自动生成),这样值的数量就和列数匹配了:
INSERT INTO Users VALUES (DEFAULT, 2, 'phil@gmail.com', 'password', 'Reavis', 'Phil', 'Street', 'Municipality', 'City', '1234567', '12345678910', 'Active', '2018-09-09 08:00:00', '2018-01-01 09:00:00');
补充一句:平时写INSERT语句尽量用方案1,明确指定列名能避免很多因表结构变化带来的潜在问题,也更便于其他开发者理解代码。
内容的提问来源于stack exchange,提问作者user7346629
相关产品推荐
相关产品推荐

