【问题标题】:Run a SQL Server procedure from Excel从 Excel 运行 SQL Server 过程
【发布时间】:2014-05-07 10:49:07
【问题描述】:

我使用的是 SQL Server 2008 Enterprise。我在一个数据库中创建了一个过程。该过程由对不同数据库的多个查询组成,并且正在显示最终的组合结果集。

我尝试通过 Excel 执行它,所以结果会自动出现在 Excel 工作表中,但我收到错误:

查询未运行,或无法打开数据库表。检查数据库服务器或联系您的 DBA。确保外部数据库可用且未被移动或识别,然后重试操作

我创建了一个更简单的过程,它只查询一个数据库,结果显示在 Excel 表上没有问题。

因此我怀疑,由于我在过程中查询了多个数据库,因此在“外部数据属性”的连接详细信息中,仅提到了一个数据库。

我的问题是 - 可以解决吗?我可以在过程中使用多个数据库并在 Excel 中查看吗?

谢谢, 罗尼

【问题讨论】:

  • 这对您有帮助。 blogs.office.com/2010/06/07/…
  • 谢谢,但这正是我正在做的。如果过程只从一个数据库中查询数据 - 连接详细信息中提到的那个,那么没有问题。当过程中的查询中有多个数据库时,我会收到错误消息。
  • 所有数据库都在同一台服务器上吗? excel 连接字符串上的 sql 登录名或用户是否有权访问每个数据库?存储过程是否返回多个结果集?如果您能够在 ssms 中毫无问题地运行存储过程,请尝试使用您的凭据在 excel 中设置连接。
  • 1.同一台服务器上的所有数据库。 2.用户对数据库中的表有访问权限。 3.只有1个结果集。 4. 我在 SSMS 中运行该过程没有问题,并获得了所需的结果集。 5. 我尝试将用户更改为更强大的用户。我仍然收到错误消息。

标签: sql-server excel tsql


【解决方案1】:

我将过程转换为使用表变量而不是临时表,并且在过程的开头添加了“set nocount on”。

第二个动作解决了这个问题。

第一个动作提高了程序的响应时间。

【讨论】:

  • 非常感谢@Roni Vered,它有帮助。
  • @Roni Vered 你发现为什么 Set NOCOUNT ON 解决了​​你的问题吗?
【解决方案2】:

(复制@Roni 答案的关键部分)

create procedure dbo.xxx
as

set nocount on
...

【讨论】:

  • 如果 proc 包含临时表,还应将记录 'SET NOCOUNT OFF' 放在 'END' 之前...否则可能会错过 SET NOCOUNT,
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-24
  • 2016-04-28
  • 1970-01-01
  • 1970-01-01
  • 2016-03-16
  • 1970-01-01
  • 2018-11-10
相关资源
最近更新 更多