查询在具有本地表的原始数据库中运行,但在表迁移到 SQL Server 时不运行 - 错误:“定义的字段过多”

Posted

技术标签:

【中文标题】查询在具有本地表的原始数据库中运行,但在表迁移到 SQL Server 时不运行 - 错误:“定义的字段过多”【英文标题】:Query runs in original DB with local tables but not when tables migrated to SQL Server - Error: "Too many fields defined" 【发布时间】:2013-05-30 00:44:54 【问题描述】:

我正在通过 SQL Server 迁移助手 (SSMA) 将 Access 数据库中的表迁移到 SQL Server。我遇到了一个奇怪的查询,它在原始版本的数据库中成功运行,使用本地表,但在迁移的数据库中没有,链接表链接到 SQL Server 后端数据库。

在迁移的数据库中,当我尝试运行查询时,我收到一条错误消息:“定义的字段太多”。

我的问题是:为什么这个查询应该使用本地表运行,但由于链接表的字段太多而失败?

查询明确列出了字段,它不使用 SELECT *。根据我的统计,查询中有 69 个字段,尽管其中有几个是计算字段,每个基础表中总计有 14 个字段。

我读过的一篇论坛帖子here 建议 Access 计算加入查询的表或查询中的基础字段。那是对的吗?如果是这样,这可能是问题的原因,因为迁移过程会将 SSMA_TimeStamp 列添加到迁移的表中。如果这是问题所在,有人知道解决方法吗?将一些计算字段拆分到另一个查询中并从该新查询中读取是否有效?

这是查询:

SELECT maininfo.id, 
       department.deptgroup, 
       department.deptgrp_desc, 
       department.dept_code, 
       department.dept_name, 
       logs_id_plan.dcpickdate, 
       maininfo.instore_date, 
       maininfo.dc_delivery, 
       Iif([idtotal] = 0, [totalsingleqty] * 0.7, [idtotal]) AS 
       [ID Estimate Qty], 
       [s1_total] + [s2_total] + [s3_total] + [s4_total] 
       + [s5_total] + [s6_total] + [s7_total] + [s8_total] 
       + [s9_total] + [s10_total] + [s11_total] 
       + [s12_total] + [s13_total] + [s14_total]             AS TotalSingleQty, 
       Nz([idpacka], 0) + Nz([idpackb], 0)                   AS IDTotal, 
       [totalapacks] * [ppa_total_ratio]                     AS IDPackA, 
       [totalbpacks] * [ppb_total_ratio]                     AS IDPackB, 
       [totalaa] + [totalab] + [totalac] + [totalad] 
       + [totalae]                                           AS TotalAPacks, 
       [totalba] + [totalbb] + [totalbc] + [totalbd] 
       + [totalbe]                                           AS TotalBPacks, 
       [gradeaqty] * [pa_qty_a]                              AS TotalAA, 
       [gradebqty] * [pa_qty_b]                              AS TotalAB, 
       [gradecqty] * [pa_qty_c]                              AS TotalAC, 
       [gradedqty] * [pa_qty_d]                              AS TotalAD, 
       [gradeeqty] * [pa_qty_e]                              AS TotalAE, 
       [gradebqty] * [pb_qty_a]                              AS TotalBA, 
       [gradebqty] * [pb_qty_b]                              AS TotalBB, 
       [gradecqty] * [pb_qty_c]                              AS TotalBC, 
       [gradedqty] * [pb_qty_d]                              AS TotalBD, 
       [gradeeqty] * [pb_qty_e]                              AS TotalBE, 
       [pac1_total] + [pac2_total] + [pac3_total] 
       + [pac4_total] + [pac5_total] + [pac6_total] 
       + [pac7_total] + [pac8_total] + [pac9_total] 
       + [pac10_total]                                       AS PPA_Total_Ratio, 
       [pbc1_total] + [pbc2_total] + [pbc3_total] 
       + [pbc4_total] + [pbc5_total] + [pbc6_total] 
       + [pbc7_total] + [pbc8_total] + [pbc9_total] 
       + [pbc10_total]                                       AS PPB_Total_Ratio, 
       [ppac1s1] + [ppac1s2] + [ppac1s3] + [ppac1s4] 
       + [ppac1s5] + [ppac1s6] + [ppac1s7] + [ppac1s8] 
       + [ppac1s9] + [ppac1s10] + [ppac1s11] + [ppac1s12] 
       + [ppac1s13] + [ppac1s14]                             AS PAC1_Total, 
       [ppac2s1] + [ppac2s2] + [ppac2s3] + [ppac2s4] 
       + [ppac2s5] + [ppac2s6] + [ppac2s7] + [ppac2s8] 
       + [ppac2s9] + [ppac2s10] + [ppac2s11] + [ppac2s12] 
       + [ppac2s13] + [ppac2s14]                             AS PAC2_Total, 
       [ppac3s1] + [ppac3s2] + [ppac3s3] + [ppac3s4] 
       + [ppac3s5] + [ppac3s6] + [ppac3s7] + [ppac3s8] 
       + [ppac3s9] + [ppac3s10] + [ppac3s11] + [ppac3s12] 
       + [ppac3s13] + [ppac3s14]                             AS PAC3_Total, 
       [ppac4s1] + [ppac4s2] + [ppac4s3] + [ppac4s4] 
       + [ppac4s5] + [ppac4s6] + [ppac4s7] + [ppac4s8] 
       + [ppac4s9] + [ppac4s10] + [ppac4s11] + [ppac4s12] 
       + [ppac4s13] + [ppac4s14]                             AS PAC4_Total, 
       [ppac5s1] + [ppac5s2] + [ppac5s3] + [ppac5s4] 
       + [ppac5s5] + [ppac5s6] + [ppac5s7] + [ppac5s8] 
       + [ppac5s9] + [ppac5s10] + [ppac5s11] + [ppac5s12] 
       + [ppac5s13] + [ppac5s14]                             AS PAC5_Total, 
       [ppac6s1] + [ppac6s2] + [ppac6s3] + [ppac6s4] 
       + [ppac6s5] + [ppac6s6] + [ppac6s7] + [ppac6s8] 
       + [ppac6s9] + [ppac6s10] + [ppac6s11] + [ppac6s12] 
       + [ppac6s13] + [ppac6s14]                             AS PAC6_Total, 
       [ppac7s1] + [ppac7s2] + [ppac7s3] + [ppac7s4] 
       + [ppac7s5] + [ppac7s6] + [ppac7s7] + [ppac7s8] 
       + [ppac7s9] + [ppac7s10] + [ppac7s11] + [ppac7s12] 
       + [ppac7s13] + [ppac7s14]                             AS PAC7_Total, 
       [ppac8s1] + [ppac8s2] + [ppac8s3] + [ppac8s4] 
       + [ppac8s5] + [ppac8s6] + [ppac8s7] + [ppac8s8] 
       + [ppac8s9] + [ppac8s10] + [ppac8s11] + [ppac8s12] 
       + [ppac8s13] + [ppac8s14]                             AS PAC8_Total, 
       [ppac9s1] + [ppac9s2] + [ppac9s3] + [ppac9s4] 
       + [ppac9s5] + [ppac9s6] + [ppac9s7] + [ppac9s8] 
       + [ppac9s9] + [ppac9s10] + [ppac9s11] + [ppac9s12] 
       + [ppac9s13] + [ppac9s14]                             AS PAC9_Total, 
       [ppac10s1] + [ppac10s2] + [ppac10s3] + [ppac10s4] 
       + [ppac10s5] + [ppac10s6] + [ppac10s7] + [ppac10s8] 
       + [ppac10s9] + [ppac10s10] + [ppac10s11] 
       + [ppac10s12] + [ppac10s13] + [ppac10s14]             AS PAC10_Total, 
       [ppbc1s1] + [ppbc1s2] + [ppbc1s3] + [ppbc1s4] 
       + [ppbc1s5] + [ppbc1s6] + [ppbc1s7] + [ppbc1s8] 
       + [ppbc1s9] + [ppbc1s10] + [ppbc1s11] + [ppbc1s12] 
       + [ppbc1s13] + [ppbc1s14]                             AS PBC1_Total, 
       [ppbc2s1] + [ppbc2s2] + [ppbc2s3] + [ppbc2s4] 
       + [ppbc2s5] + [ppbc2s6] + [ppbc2s7] + [ppbc2s8] 
       + [ppbc2s9] + [ppbc2s10] + [ppbc2s11] + [ppbc2s12] 
       + [ppbc2s13] + [ppbc2s14]                             AS PBC2_Total, 
       [ppbc3s1] + [ppbc3s2] + [ppbc3s3] + [ppbc3s4] 
       + [ppbc3s5] + [ppbc3s6] + [ppbc3s7] + [ppbc3s8] 
       + [ppbc3s9] + [ppbc3s10] + [ppbc3s11] + [ppbc3s12] 
       + [ppbc3s13] + [ppbc3s14]                             AS PBC3_Total, 
       [ppbc4s1] + [ppbc4s2] + [ppbc4s3] + [ppbc4s4] 
       + [ppbc4s5] + [ppbc4s6] + [ppbc4s7] + [ppbc4s8] 
       + [ppbc4s9] + [ppbc4s10] + [ppbc4s11] + [ppbc4s12] 
       + [ppbc4s13] + [ppbc4s14]                             AS PBC4_Total, 
       [ppbc5s1] + [ppbc5s2] + [ppbc5s3] + [ppbc5s4] 
       + [ppbc5s5] + [ppbc5s6] + [ppbc5s7] + [ppbc5s8] 
       + [ppbc5s9] + [ppbc5s10] + [ppbc5s11] + [ppbc5s12] 
       + [ppbc5s13] + [ppbc5s14]                             AS PBC5_Total, 
       [ppbc6s1] + [ppbc6s2] + [ppbc6s3] + [ppbc6s4] 
       + [ppbc6s5] + [ppbc6s6] + [ppbc6s7] + [ppbc6s8] 
       + [ppbc6s9] + [ppbc6s10] + [ppbc6s11] + [ppbc6s12] 
       + [ppbc6s13] + [ppbc6s14]                             AS PBC6_Total, 
       [ppbc7s1] + [ppbc7s2] + [ppbc7s3] + [ppbc7s4] 
       + [ppbc7s5] + [ppbc7s6] + [ppbc7s7] + [ppbc7s8] 
       + [ppbc7s9] + [ppbc7s10] + [ppbc7s11] + [ppbc7s12] 
       + [ppbc7s13] + [ppbc7s14]                             AS PBC7_Total, 
       [ppbc8s1] + [ppbc8s2] + [ppbc8s3] + [ppbc8s4] 
       + [ppbc8s5] + [ppbc8s6] + [ppbc8s7] + [ppbc8s8] 
       + [ppbc8s9] + [ppbc8s10] + [ppbc8s11] + [ppbc8s12] 
       + [ppbc8s13] + [ppbc8s14]                             AS PBC8_Total, 
       [ppbc9s1] + [ppbc9s2] + [ppbc9s3] + [ppbc9s4] 
       + [ppbc9s5] + [ppbc9s6] + [ppbc9s7] + [ppbc9s8] 
       + [ppbc9s9] + [ppbc9s10] + [ppbc9s11] + [ppbc9s12] 
       + [ppbc9s13] + [ppbc9s14]                             AS PBC9_Total, 
       [ppbc10s1] + [ppbc10s2] + [ppbc10s3] + [ppbc10s4] 
       + [ppbc10s5] + [ppbc10s6] + [ppbc10s7] + [ppbc10s8] 
       + [ppbc10s9] + [ppbc10s10] + [ppbc10s11] 
       + [ppbc10s12] + [ppbc10s13] + [ppbc10s14]             AS PBC10_Total, 
       [totalaa] + [totalba]                                 AS ID_AStores, 
       [totalab] + [totalbb]                                 AS ID_BStores, 
       [totalac] + [totalbc]                                 AS ID_CStores, 
       [totalad] + [totalbd]                                 AS ID_DStores, 
       [totalae] + [totalbe]                                 AS ID_EStores, 
       [c1s1] + [c2s1] + [c3s1] + [c4s1] + [c5s1] + [c6s1] 
       + [c7s1] + [c8s1] + [c9s1] + [c10s1]                  AS S1_Total, 
       [c1s2] + [c2s2] + [c3s2] + [c4s2] + [c5s2] + [c6s2] 
       + [c7s2] + [c8s2] + [c9s2] + [c10s2]                  AS S2_Total, 
       [c1s3] + [c2s3] + [c3s3] + [c4s3] + [c5s3] + [c6s3] 
       + [c7s3] + [c8s3] + [c9s3] + [c10s3]                  AS S3_Total, 
       [c1s4] + [c2s4] + [c3s4] + [c4s4] + [c5s4] + [c6s4] 
       + [c7s4] + [c8s4] + [c9s4] + [c10s4]                  AS S4_Total, 
       [c1s5] + [c2s5] + [c3s5] + [c4s5] + [c5s5] + [c6s5] 
       + [c7s5] + [c8s5] + [c9s5] + [c10s5]                  AS S5_Total, 
       [c1s6] + [c2s6] + [c3s6] + [c4s6] + [c5s6] + [c6s6] 
       + [c7s6] + [c8s6] + [c9s6] + [c10s6]                  AS S6_Total, 
       [c1s7] + [c2s7] + [c3s7] + [c4s7] + [c5s7] + [c6s7] 
       + [c7s7] + [c8s7] + [c9s7] + [c10s7]                  AS S7_Total, 
       [c1s8] + [c2s8] + [c3s8] + [c4s8] + [c5s8] + [c6s8] 
       + [c7s8] + [c8s8] + [c9s8] + [c10s8]                  AS S8_Total, 
       [c1s9] + [c2s9] + [c3s9] + [c4s9] + [c5s9] + [c6s9] 
       + [c7s9] + [c8s9] + [c9s9] + [c10s9]                  AS S9_Total, 
       [c1s10] + [c2s10] + [c3s10] + [c4s10] + [c5s10] 
       + [c6s10] + [c7s10] + [c8s10] + [c9s10] + [c10s10]    AS S10_Total, 
       [c1s11] + [c2s11] + [c3s11] + [c4s11] + [c5s11] 
       + [c6s11] + [c7s11] + [c8s11] + [c9s11] + [c10s11]    AS S11_Total, 
       [c1s12] + [c2s12] + [c3s12] + [c4s12] + [c5s12] 
       + [c6s12] + [c7s12] + [c8s12] + [c9s12] + [c10s12]    AS S12_Total, 
       [c1s13] + [c2s13] + [c3s13] + [c4s13] + [c5s13] 
       + [c6s13] + [c7s13] + [c8s13] + [c9s13] + [c10s13]    AS S13_Total, 
       [c1s14] + [c2s14] + [c3s14] + [c4s14] + [c5s14] 
       + [c6s14] + [c7s14] + [c8s14] + [c9s14] + [c10s14]    AS S14_Total, 
       maininfo.vendor, 
       logs_id_plan.dcbooked, 
       kn_idinfo.eta 
FROM   kn_idinfo 
       RIGHT JOIN (department 
                   RIGHT JOIN (logs_id_plan 
                               RIGHT JOIN ((prepackb 
                                            RIGHT JOIN (prepacka 
                                                        RIGHT JOIN maininfo 
                                                                ON prepacka.id = 
                                                                   maininfo.id) 
                                                    ON prepackb.id = 
                                           maininfo.id) 
                                           LEFT JOIN qty_table 
                                                  ON maininfo.id = qty_table.id) 
                                       ON logs_id_plan.id = maininfo.id) 
                           ON department.dept_code = maininfo.dept) 
               ON kn_idinfo.[purchase order(on)] = maininfo.sap_po_num 
WHERE  (( ( department.dept_code ) NOT LIKE "us*" )); 

我会第一个承认查询是野兽,但我正在尝试迁移数据库而不从头开始重写所有内容,因为几个月后 Access 前端将被基于 Web 的应用程序取代.

【问题讨论】:

【参考方案1】:

最后,我将总列(例如 PAC1_Total、S1_Total 等)的计算移到 SQL Server 上的视图中,在 Access 中创建指向新视图的链接表,然后修改查询以使用这些新链接表, 除了其他表。我怀疑计算列嵌套得太深(因为在 Access 计算列可以被同一 SQL 语句中的其他计算列引用)。

但仍然没有解释为什么查询适用于本地表而不是链接表。

【讨论】:

以上是关于查询在具有本地表的原始数据库中运行,但在表迁移到 SQL Server 时不运行 - 错误:“定义的字段过多”的主要内容,如果未能解决你的问题,请参考以下文章

在表中为每个数据库查找具有空值的列[关闭]

MySQL 查询在 /tmp 中使用了 10G 的空间,并因“Errcode:28 - 设备上没有剩余空间”而死,但在本地运行良好

根据 Redshift 中其他表的条目在表中插入值

对第二个表中不存在 ID 的两个表的 MySQL 查询优化

查看在表上具有自联接

在运行 sequelize 迁移时如何打印原始查询?