我有一个数据库,我正在尝试从Access with ODBC查询。我需要从中读取的表有304列,并且我只能在查询生成器中看到前255个列。我在其他地方读过,解决方案是手动编写SQL查询,而不是依赖Builder,因此我尝试了以下查询:
SELECT [Field1], [Field304]
FROM [ODBC;DRIVER=SQL Server;UID=USERNAME;SERVER=ServerAddress].[TabelName];
该查询返回的是Field1,与我期望的一样,但仍然不会获得Field304。我究竟做错了什么?
最佳答案
您在Access中遇到了ODBC链接表的局限性,并且查询类似于
SELECT ... FROM [ODBC;...].[tableName];
实际上只是“动态”创建临时ODBC链接表的一种方法。
当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中的信息,则可以创建一个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主键列是什么,否则链接表将不可更新。
关于sql - Access ODBC无法从超过255列的SQL表中提取,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28306065/