Access 2021中多记录INSERT INTO的SQL语法问题求助
问题分析与解决方案
1. 简化示例中的明显错误
你在简化示例的INSERT语句里把flavor拼写成了favor,这会直接导致语法错误,修正后应为:
INSERT INTO table1(color,name,flavor) SELECT color,name,flavor from table2
2. 实际SQL语句的核心问题
你的实际SQL中,字段名包含连字符(-),比如snapshot-Date、product-Name、fulfillment-center-id等。在SQL语法中,这类包含特殊字符的标识符不能直接使用,数据库会将连字符解析为减法运算符,从而触发语法错误。
针对不同数据库的修正方案
根据你使用的数据库类型,需要用对应的符号包裹这些特殊字段名:
MySQL/MariaDB
使用反引号(`)包裹字段名:
INSERT INTO tblDailyInventoryHistorytest(`snapshot-Date`, `fnsku`, `sku`, `product-Name`, `quantity`, `fulfillment-center-id`, `detailed-disposition`) SELECT `snapshot-date`, `fnsku`, `sku`, `product-Name`, `quantity`, `fulfillment-center-id`, `detailed-disposition` FROM tblInventoryLedgerRaw
SQL Server
使用方括号([])包裹字段名:
INSERT INTO tblDailyInventoryHistorytest([snapshot-Date], [fnsku], [sku], [product-Name], [quantity], [fulfillment-center-id], [detailed-disposition]) SELECT [snapshot-date], [fnsku], [sku], [product-Name], [quantity], [fulfillment-center-id], [detailed-disposition] FROM tblInventoryLedgerRaw
PostgreSQL
使用双引号("")包裹字段名(注意PostgreSQL区分大小写,需确保字段名大小写与表结构一致):
INSERT INTO tblDailyInventoryHistorytest("snapshot-Date", "fnsku", "sku", "product-Name", "quantity", "fulfillment-center-id", "detailed-disposition") SELECT "snapshot-date", "fnsku", "sku", "product-Name", "quantity", "fulfillment-center-id", "detailed-disposition" FROM tblInventoryLedgerRaw
3. 额外注意事项
- 确保INSERT和SELECT中的字段数量完全一致,且对应字段的数据类型兼容
- 如果你使用表前缀(如
tblInventoryLedgerRaw.snapshot-date),建议所有字段都统一添加前缀,避免潜在的歧义(即使当前只有一张表)
内容的提问来源于stack exchange,提问作者user6713235
相关产品推荐
相关产品推荐

