Access ODBC 无法从超过 255 列的 SQL table 中提取

Access ODBC can't pull from SQL table with more than 255 columns

我有一个数据库,我正尝试使用 ODBC 从 Access 查询该数据库。我需要读取的 table 有 304 列,我只能在查询生成器中看到前 255 列。我在其他地方读到解决方案是手动编写 SQL 查询而不是依赖 Builder,所以我尝试了这个查询:

SELECT [Field1], [Field304] 
FROM [ODBC;DRIVER=SQL Server;UID=USERNAME;SERVER=ServerAddress].[TabelName];

此查询 returns Field1 与我预期的一样,但仍然无法获得 Field304。我究竟做错了什么?

您在 Access 中遇到了 ODBC 链接 tables 的限制,以及类似

的查询
SELECT ... FROM [ODBC;...].[tableName];

实际上只是一种创建临时 ODBC 链接的方法 table "on the fly"。

当 Access 创建链接的 ODBC 时 table 它查询远程数据库以获取列信息。 Access 中保存 table 信息的结构限于 255 列,因此只有远程 table 的前 255 列可用。例如,对于 SQL 服务器 table

CREATE TABLE manyColumns (
id int identity(1,1) primary key,
intCol002 int,
intCol003 int,
intCol004 int,
...
intCol255 int,
intCol256 int,
intCol257 int)

这样的 Access 查询
SELECT [id], [intCol002], [intCol255] 
FROM [ODBC;DRIVER={SQL Server};SERVER=.\SQLEXPRESS;DATABASE=myDb].[manyColumns];

会起作用,但是这个查询

SELECT [id], [intCol002], [intCol256] 
FROM [ODBC;DRIVER={SQL Server};SERVER=.\SQLEXPRESS;DATABASE=myDb].[manyColumns];

将提示输入 "parameter" [intCol256],因为 Access 不知道 SQL 服务器 table.

中存在这样的列

有两种方法可以解决此问题:

(1) 如果您只需要阅读Access中的信息,您可以创建一个Access pass-through query

SELECT [id], [intCol002], [intCol256] 
FROM [manyColumns];

这将 return 所需的列,但传递查询总是生成不可更新的记录集。

(2) 如果您需要一个可更新的记录集,那么您需要在 SQL 服务器上创建一个视图

CREATE VIEW selectedColumns AS
SELECT [id], [intCol002], [intCol256] 
FROM [manyColumns];

然后在指向视图的 Access 中创建链接 table 的 ODBC。创建 ODBC 链接时 table 记得告诉 Access 主键列是什么,否则链接 table 将不可更新。

我这边的修复超级简单

  1. 点击开始菜单
  2. 搜索'ODBC'
  3. 单击 'system DSN' 选项卡
  4. 突出显示 odbc 和 select 'configure'
  5. 单击 'advanced' 选项卡
  6. 将最大列数调整为 3000(或更高的数字)