关于 SQL 插入语句的问题

Posted

技术标签:

【中文标题】关于 SQL 插入语句的问题【英文标题】:Issue on SQL Insert Statement 【发布时间】:2013-08-03 10:29:10 【问题描述】:

我在 MS ACCESS 数据库中遇到错误“查询值和目标字段的数量不一样”

这是我的查询:

我将其命名为 QryMetrics

SELECT A, B, C, D, E, F
FROM (SELECT count(ID ) as A FROM RelevantResults WHERE Field1 Is Not Null and Field1 <> Chr(13) & Chr(10))  AS Q1,
(SELECT count(ID) as B FROM RelevantResults WHERE Field2 Is Not Null)  AS Q2, 
(SELECT COUNT(ID) as C FROM RelevantResults WHERE Field3 Like '*.jpg' AND Field1 Is Not Null)  AS Q3, 
(SELECT COUNT(ID) as D FROM RelevantResults WHERE Field3 Like '*.jpg' OR Field1 Is Not Null)  AS Q4,
(SELECT COUNT(ID) as E FROM RelevantResults WHERE Field3 Like '*.jpg' OR Field1 Is Not Null OR Field2 Is Not Null)  AS Q5,
(SELECT COUNT(ID) as F FROM RelevantResults WHERE Field3 Like '*.jpg')  AS Q6;

插入查询:

StrSQL = "INSERT INTO metrics (Filename, Field1, Field2, Field3, Field4, Field5, Field6)
Select '" & strFile & "', QryMetrics.* from QryMetrics;"

我在 VB 中使用 DoCmd.RunSQL 执行插入查询。

DoCmd.RunSQL StrSQL

当我尝试在数据库中仅针对 6 个字段运行查询时: 我遇到了一个错误: Insert into 语句包含以下未知字段名称:'A'

INSERT INTO metrics (Field1, Field2, Field3, Field4, Field5, Field6)
select  * from qryMetrics

对此有什么想法吗?谢谢

【问题讨论】:

看起来不错。让我感到困惑的是'" &amp; strFile &amp; "' 部分。那不应该是"'" &amp; strFile &amp; "'"吗? 它在我的 VB 中运行良好。我正在传递一个变量。 【参考方案1】:

这解决了我的问题:

StrSQL = "INSERT INTO metrics (Filename, Field1, Field2, Field3, Field4, Field5, Field6)
Select '" & strFile & "', A, B, C, D, E, F from QryMetrics;"

【讨论】:

【参考方案2】:
INSERT INTO metrics (Filenae, Field1, Field2, Field3, Field4, Field5, Field6)
Select '" & strFile & "',     -- 1 column
        QryMetrics.*          -- + 6 from QryMetrix
from QryMetrics;              -- = 7 in total

插入中的列列表有 6 列(field1、field2、... field6), 但您的选择返回 7 列。

【讨论】:

不,它有 7 个,包括文件名 + 6 个字段

以上是关于关于 SQL 插入语句的问题的主要内容,如果未能解决你的问题,请参考以下文章

关于SQL server 插入数据时语言和特殊字符的处理

关于不需要使用SQL语句的SQLite数据库数据插入方法

关于hibernate的show sql

关于SQL插入数据的字段名问题

SQL语句关于where判断问题

Oracle sql,单插入语句,多列