从Excel运行的SQL无法使用临时表

Mat*_*rke 21 sql sql-server excel

我已经能够创建从Excel到SQL Server的数据连接并成功执行许多SQL查询.但如果它包含一个临时表,我无法使任何TSQL工作.例如:

select * into #t from compass3.dbo.freq
select * from #t where freq_id>2
Run Code Online (Sandbox Code Playgroud)

(显然在这种情况下不需要使用#t:我只是给出了最简单的例子.)这在SSMS中工作正常但是当通过Excel执行时我收到错误消息"我们无法刷新连接"audbbicube '.表'离子Query1'可能不存在."

在其他一些SO帖子中,人们建议添加set nocount on,但这种情况没有区别.

小智 20

我想添加上面的答案 - 只需SET NOCOUNT ON在查询的顶部使用,常规临时表SELECT name INTO #Names FROM Employee应该工作.

这里不需要表变量.

您还可以添加SET ANSI_WARNINGS OFF以避免诸如"聚合消除NULL值"之类的消息.

  • 这个答案是正确的,当我尝试从Excel运行SP时,我遇到了与OP相同的问题,这应该从嵌入的`SELECT`返回数据.它是由从服务器返回的*... row(s)受影响的*消息引起的.显然,Excel无法正确处理此消息,并且忽略返回的数据.在我的SP中使用"SET NOCOUNT ON"后,数据在Excel中正确显示. (3认同)

Mat*_*rke 13

以下似乎有效......

set nocount on
declare @t table(fid int)  -- I'm sure I could add the rest of the columns if I wanted to
insert @t select freq_id from compass3.dbo.freq
select * from @t where fid>2
Run Code Online (Sandbox Code Playgroud)

因此,只要我打开nocount并使用表变量而不是临时表,我就能实现我所需要的.