【发布时间】:2014-01-28 22:04:58
【问题描述】:
我已经能够创建从 Excel 到 SQL Server 的数据连接并成功执行许多 SQL 查询。但是如果它包含一个临时表,我将无法让任何 TSQL 工作。例如:
select * into #t from compass3.dbo.freq
select * from #t where freq_id>2
(显然在这种情况下不需要使用#t:我只是给出最简单的例子。)这在 SSMS 中工作正常,但是当通过 Excel 执行时,我收到错误消息“我们无法刷新连接‘audbbicube’。表‘ion Query1’可能不存在。”
在其他一些 SO 帖子中,人们建议添加 set nocount on,但这在这种情况下没有任何区别。
【问题讨论】:
-
为什么要使用#temp 表?
-
因为在实际任务中,我需要使用不同的参数多次运行存储过程,合并每次执行的输出,并将整个结果集返回到 Excel。所以我创建了一个临时表,并在每次执行后将存储过程的输出插入到该表中,然后将临时表返回到 Excel。
-
那么你为什么不编写一个存储过程来完成所有这些,并从 Excel 中调用一次 that 存储过程呢?问题将是 - 我怀疑 - Excel 单独发出所有这些查询,因此 #temp 表或 @table 变量永远不会跨越这些独立语句的范围。
-
我是 BI 人员,使用已经可用的存储过程为来自业务用户的各种临时请求提供服务。我不是负责编写存储过程的数据库人员。这种特定需求不太可能保证与维护新存储过程相关的变更管理。
-
据我了解,Aaron 的推理是正确的……临时表在这里无法正常工作。您是否尝试过将 TSQL 语句中存储过程的结果联合起来,而不是尝试将单个结果存储在临时表中? (仅供参考,您的报告创建结构很糟糕,您的公司基本上已经将存储过程转换为数据源并从中编写报告。嘿,您可能对设置感到沮丧)
标签: sql sql-server excel