从Wonderware Historian取数插入SQL表列匹配错误问题求助
解决Wonderware Historian数据插入SQL表报错问题
你遇到的报错Column name or number of supplied values does not match table definition的核心原因是:你SELECT查询返回的字段数量、顺序或数据类型,和目标表x_TagsDescr的结构不匹配,按以下步骤排查解决即可:
首先查询目标表结构确认字段信息,执行如下命令查看
x_TagsDescr的所有字段、顺序、数据类型:sp_help 'x_TagsDescr'确认你需要插入的5个字段(TagName、StartDateTime、EndDateTime、Value、vValue)和表的字段数量、对应位置、类型是否兼容。
必须显式指定插入的字段列表,不要省略插入字段部分。省略插入字段列表时,数据库会默认按表创建时的字段顺序匹配你SELECT返回的列,如果表有额外字段(比如自增主键、默认值字段、计算字段)就会直接报错,修改后的插入语句参考:
INSERT INTO x_TagsDescr (TagName, StartDateTime, EndDateTime, Value, vValue) SELECT StateSummaryHistory.TagName, StartDateTime, EndDateTime, Value, vValue FROM StateSummaryHistory WHERE StateSummaryHistory.TagName IN ('VTIS01_FT04', 'VTIS01_TT344') -- 保留Historian查询的过滤条件,避免插入无效冗余数据 AND wwVersion = 'Latest' AND wwRetrievalMode = 'Cyclic' AND wwCycleCount = 1 AND StartDateTime >= DateAdd(mi,-5,GetDate()) AND EndDateTime <= GetDate()如果确认字段数量不匹配,按需调整即可:如果
x_TagsDescr有不需要插入的额外字段(比如自增ID、创建时间默认值字段),只要你已经按上一步显式指定了要插入的字段列表,数据库会自动用默认值填充额外字段;如果是对应字段的数据类型不兼容,使用CAST或CONVERT函数做类型转换即可,比如数值转字符串可以写为CAST(Value AS VARCHAR(50))。
内容的提问来源于stack exchange,提问作者NelsonLucas
相关产品推荐
相关产品推荐

