在 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 临时表的主要内容,如果未能解决你的问题,请参考以下文章