【问题标题】:create sql server temp table in MS access passthru在 MS access passthru 中创建 sql server 临时表
【发布时间】:2013-06-17 21:19:07
【问题描述】:

我创建了一个访问查询,其中包含大约 700 条记录的 3 字段输出,我想将其用作 SQL Server 的直通查询的输入。

我已经完全在 SQL Server 中测试了这个过程,它工作正常,但是当我尝试在 passtrhu 中运行相同的代码时,我得到一个错误

returnrecords 属性设置为 yes 的直通查询没有 返回任何记录。

这是查询的前几行:

if object_id('tempdb..#marktmp1') is not null drop table #marktmp1
create table #marktmp1
(Cid bigint,
Ccd varchar(6),
Ciss int);
/*
Insert into #marktmp1
values
(5110029175,    'SPO',  17),
(5110029722,    'SPO',  17),
(5110035139,    'SPO',  17);

我只是将第一个查询的输出复制/粘贴到上面的列表中

在记录列表的末尾,我尝试将#marktmp1 表连接到现有表。

我们使用的是 Sql Server 2012。

【问题讨论】:

    标签: sql-server ms-access sql-server-2012 pass-through


    【解决方案1】:

    如果没有看到您的其余代码,我猜您永远不会以任何其他方式进行选择或返回结果集(例如调用存储过程)。如果是这种情况,请查看此答案中的 IMPORTANT 注释:

    how-to-create-temp-tables-in-sql-server-via-ms-access

    请注意,在我的答案之后,还要检查 Gord Thompson 的答案,并确保您不会遇到麻烦。

    【讨论】:

    • 查询的其余部分连接到大约 15 个其他表,我确实想在选择查询中返回结果。它实际上是我联合在一起的 2 个选择查询。我希望两者都使用我试图加载到临时表的记录。它们很长,所以我省略了它
    • 这里要确定的是,您使用的是本地临时表,并且您不会触及 TSQL 脚本之外的临时表。当您使用 SQL Server 中的相同数据运行脚本时,它可以正常工作,并且实际上确实返回了数据?您能否将临时表转换为真实表,看看它是否有效?
    • 我真的没那么有经验。但是,我所指的唯一临时表是我在上面的脚本中创建的那个。是的 - 当我完全在 SQL Server 中运行完整的脚本时,它确实会返回数据。我认为我没有创建真实表格的权限。但是,我从我创建的临时表中选择了 *,并且我插入的记录被返回了
    • 我认为您将不得不发布整个脚本。您可以省略大部分插入;只包含第一个和最后一个值。
    • 哦,另外,您可以通过打印实际查询文本的 Debug.Print 语句获得该语句。只是想确保您发布的查询实际上是正在运行的查询。
    【解决方案2】:

    简单的解决方案:添加 SET NOCOUNT ON 作为 pass thru 中的第一个命令。

    当您将记录插入#temp 表时,SQL Server 以### Record(s) affected. 响应,Access 看到此消息并将其解释为查询完成,但未找到返回的行。这就是你得到的原因

    returnrecords 属性设置为 yes 的直通查询没有 返回任何记录

    SET NOCOUNT ON 关闭这些信息消息,然后访问将等待最终的SELECT 发生。

    【讨论】:

      猜你喜欢
      • 2013-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-03
      • 1970-01-01
      相关资源
      最近更新 更多