我有一个数据库,我试图从Access使用ODBC查询。我需要读取的表有304列,我只能在查询生成器中看到前255个。我在其他地方读过,解决方案是手工编写SQL查询而不是依赖于Builder,所以我尝试了这个查询:
SELECT [Field1], [Field304]
FROM [ODBC;DRIVER=SQL Server;UID=USERNAME;SERVER=ServerAddress].[TabelName];
此查询返回Field1,就像我期望的那样,但仍然无法获得Field304。我究竟做错了什么?
答案 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)
对我而言超级简单的修复