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

时间:2015-02-03 18:24:22

标签: sql ms-access odbc ms-access-2013

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

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

此查询返回Field1,就像我期望的那样,但仍然无法获得Field304。我究竟做错了什么?

2 个答案:

答案 0 :(得分:6)

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

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

实际上只是一种创建临时ODBC链接表的方法"即时#34;。

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

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];

将提示"参数" [intCol256]因为Access不知道SQL Server表中存在这样的列。

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

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

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

这将返回所需的列,但是传递查询始终会生成不可更新的记录集。

(2)如果您需要可更新的记录集,那么您需要在SQL Server上创建一个View

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

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

答案 1 :(得分:0)

对我而言超级简单的修复

  1. 点击开始菜单
  2. 搜索“ ODBC”
  3. 点击“系统DSN”标签
  4. 突出显示odbc并选择“配置”
  5. 点击“高级”标签
  6. 将最大列调整为3000(或更高的数字)