INSERT INTO 语句包含以下未知字段名称

Posted

技术标签:

【中文标题】INSERT INTO 语句包含以下未知字段名称【英文标题】:INSERT INTO statement contains following unknown field name 【发布时间】:2011-04-12 01:01:08 【问题描述】:

我在 Windows 7 64 位上使用 Coldfusion 9,0,0,251028 和 Microsoft Access 97 数据库。

当我运行这个查询时:

<cfquery name="put_in_info" datasource="#db#">

      insert into news

                  (is_current, display, mes_dat,mes_tim,mes_sub,mes_text,scrollshow,exp_dat)

      values

  (1,1, #createodbcdate(now())#, #createodbctime(now())#, '#subject#', '#message#',1, #session.expdate#)

</cfquery>

我收到此错误:

Error Executing Database Query.

[Macromedia][SequeLink JDBC Driver][ODBC Socket][Microsoft][ODBC Microsoft Access Driver] The INSERT INTO statement contains the following unknown field name: 'exp_dat'. Make sure you have typed the name correctly, and try the operation again.   The error occurred in H:\Inetpub\pvalert.com\listserver\admin\templates\post_breaking.cfm: line 26
Called from H:\Inetpub\pvalert.com\listserver\admin\new_process.cfm: line 54
Called from H:\Inetpub\pvalert.com\listserver\admin\templates\post_breaking.cfm: line 26
Called from H:\Inetpub\pvalert.com\listserver\admin\new_process.cfm: line 54

24 :      (is_current, display, mes_dat,mes_tim,mes_sub,mes_text,scrollshow,exp_dat)

25 :   values

26 :   (1,1, #createodbcdate(now())#, #createodbctime(now())#, '#subject#', '#message#',1, #session.expdate#)

27 :    </cfquery>

28 :

VENDORERRORCODE


  -1507

SQLSTATE


  HYS22

SQL


   insert into news (is_current, display, mes_dat,mes_tim,mes_sub,mes_text,scrollshow,exp_dat) values (1,1, d '2011-04-11', t '17:49:09', 'Test message - please ignore', 'This is a test message, please ignore. ',1, ts '2011-05-15 00:00:00')

DATASOURCE


  rpv_list

Exp_dat 是我需要更新的表中的到期日期列。

我已尝试删除“会话”。在 expdate 变量上,那什么也没做。同样用于删除第 24 行“exp_dat”周围的任何空格。

【问题讨论】:

【参考方案1】:

给出的错误消息没有抱怨插入的值。它指出字段“exp_dat”在您的表/视图“新闻”中不存在。

首先要做的是仔细检查是否真的有一个名为“exp_dat”的字段。如果您没有直接访问数据库的权限,只需从 ColdFusion 中启动查询并转储查询结果。

<cfquery name="getSomeRowsFromNewsTable" datasource="#db#" maxrows="10">
select * from news
</cfquery>
<cfdump var="#getSomeRowsFromNewsTable#" abort="true">

也许有人给该字段起别名,或者没有在视图中包含现有字段,或者它被称为“exp_dattim”,或者...

【讨论】:

我运行了一个获取所有行的 select 语句,然后: 并得到:DISPLAY,EXP_DAT,ID,IS_CURRENT, MES_DAT,MES_SUB,MES_TEXT,MES_TIM,SCROLLSHOW 所以看来该列确实存在 @BarrettChamberlain 您的评论反对 v 接受回复..,您能告诉我们实际解决问题的方法吗?字段名称敏感度中的大写/小写?【参考方案2】:

我已经多次遇到这个问题,使用 MS Access。我知道列名拼写正确并且该列存在。 例如,我可以毫无问题地在列上执行“SELECT”,但是当我尝试简单的 SQL INSERT 时,我得到了那个错误:“... Unknown field name” 我没有输入任何内容,只是使用复制和粘贴,所以没有错字的机会。 Access 确实可以识别 SELECT 语句中的列名,并且在尝试 INSERT 时无法识别相同的列名。

这似乎是 MS Access 2010 中的一个错误。

【讨论】:

我也可以在 2007 年确认这个错误。我如何解决这个错误是我注意到 Access 将有助于将查询设计器中的列重命名为它想要的名称。如果我更改了表中的列名以匹配它,那么插入查询将运行得很好。【参考方案3】:

尝试将插入语句中插入的每个值都用单引号括起来。即'#variable#', '#another_var#' -- 等等。我想我有同样的问题,但这样做解决了它。

【讨论】:

【参考方案4】:

给定一个 INSERT 查询,例如

INSERT INTO tblname ('column1', 'column2', 'column3' ...) VALUES ...

尝试在列名周围使用方括号 - 即 []-,如下所示:

INSERT INTO tblname ([column1], [column2], [column3] ...) VALUES ...

这在 Access SQL GUI 解释器中对我有用,但可能无法解决 OP 的特定情况(Coldfusion 等)。

【讨论】:

以上是关于INSERT INTO 语句包含以下未知字段名称的主要内容,如果未能解决你的问题,请参考以下文章

sql insert into语句错误

asp.net 中的 INSERT INTO 语句中的语法错误

INSERT INTO 查询不能包含多值字段

“查询输入必须至少包含一个表或查询”添加“INSERT INTO”语句时出错

insert into的用法

MySQL INSERT INTO / ON DUPLICATE KEY 与 SELECT 语句问题