在 MS access passthru 中创建 sql server 临时表

Posted

技术标签:

【中文标题】在 MS access passthru 中创建 sql server 临时表【英文标题】:create sql server temp table in MS access passthru 【发布时间】: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。

【问题讨论】:

【参考方案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 发生。

【讨论】:

以上是关于在 MS access passthru 中创建 sql server 临时表的主要内容,如果未能解决你的问题,请参考以下文章

如何在 MS Access 2013 中创建只读表?

如何在 Ms Access 中创建完全相同的东西?

如何在 MS Access 中创建“只写”远程表?

我可以在 MS Access 2010 中创建存储过程吗?

如何在 MS Access 2007 中创建报告?

在 MS Access DB 中创建临时表