【问题标题】:Fetching selected columns from a wide (> 255 columns) SQL Server table into MS Access从宽(> 255 列)SQL Server 表中获取选定列到 MS Access
【发布时间】:2016-01-07 20:11:29
【问题描述】:

我有一些 VBA 代码可以分析 MS Access 中的数据。一些数据位于 SQL Server 中(在 Access 中链接)。

我的问题是这个特定表的列太多 (255+),因此 Access 会截断一些与我相关的列。

我的想法是我可以使用 ADO(或 DAO)提取相关数据(我只需要 10 列左右),将其保存在我的访问表中,然后继续执行其余的逻辑。

Dim cn As New ADODB.Connection
Dim ssql as String
cn = CreateObject("ADODB.Connection")
cn.Open "Provider=SQLOLEDB;Data Source=ServerName;Initial Catalog=CID;Integrated Security=SSPI;"
ssql = "SELECT a.channel, a.Firm_Name, a.[AUM 0915], a.[Rev 0915] INTO [Localtable] FROM dbo.TableName"
cn.execute (ssql)

我可以获取 Recordset 然后循环遍历它,尽管我并不热衷于这样做(它有几十万行数据,这使得它非常慢)。我希望的是一个解决方案,要么

  1. (最好)在一条 SQL 语句中完成所有操作

  2. (我会接受这个)将整个 Recordset 转储到 Access(希望有效)

欣赏任何指针。这是我的额外限制

  1. 我对数据如何存储在 SQL Server 本身没有任何发言权,所以我不能要求任何人减少列数

  2. 我在SQL服务器上只有读权限,所以不能在服务器上新建表再通过Access链接

谢谢。

【问题讨论】:

  • 您能否要求 DBA 创建一个视图,从宽表中提取这 10 列,然后在 Access 中链接到该视图?
  • 当您说“在一条 SQL 语句中完成所有操作”时,“它”是什么?
  • 您可以使用 Access 传递查询(使用与您的问题相同的 SELECT 语句)来仅检索您需要的列。传递查询生成的记录集将是只读的,但如果需要,您始终可以将其转储到 Access 中的临时表中。
  • @Hansup:很遗憾,我没有那个选项(这是我的约束 #1)
  • 说你 create a pass-through query 并将其命名为 [myPassThroughQuery]。然后,您可以使用像 SELECT * INTO [myLocalTable] FROM [myPassThroughQuery] 这样的生成表查询将内容转储到本地 Access 表中。

标签: sql sql-server vba ms-access


【解决方案1】:

实现目标最直接的方法可能是使用问题中引用的 SELECT 语句来create a pass-through query。传递查询在 SQL Server 上执行,因此不限于 SQL Server 表的前 255 列,就像 Access 中的 ODBC 链接表一样。

通过 SELECT 查询生成的记录集将是只读的。如果在其他查询中使用它时证明不方便(即,通过绊倒“查询必须使用可更新记录集”错误),那么您始终可以使用生成表查询将传递查询的结果转储到本地访问表:

SELECT * INTO [myLocalTable] FROM [myPassThroughQuery]

【讨论】:

    猜你喜欢
    • 2015-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-04
    相关资源
    最近更新 更多