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 将不可更新。
我这边的修复超级简单
- 点击开始菜单
- 搜索'ODBC'
- 单击 'system DSN' 选项卡
- 突出显示 odbc 和 select 'configure'
- 单击 'advanced' 选项卡
- 将最大列数调整为 3000(或更高的数字)
我有一个数据库,我正尝试使用 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 将不可更新。
我这边的修复超级简单
- 点击开始菜单
- 搜索'ODBC'
- 单击 'system DSN' 选项卡
- 突出显示 odbc 和 select 'configure'
- 单击 'advanced' 选项卡
- 将最大列数调整为 3000(或更高的数字)