【问题标题】:Invalid object name when trying to insert into a temp table尝试插入临时表时对象名称无效
【发布时间】:2012-03-09 00:06:48
【问题描述】:

我正在尝试监视数据库的镜像副本。我正在运行一个脚本,该脚本也能够执行其他检查,其中一些与导致我出现问题的那个非常相似。

有效的代码:

  conn.execute "if object_id('tempdb..#logs') is not null drop table tempdb..#logs"
  conn.execute "create table #logs (...'a lot of variables)"
  conn.execute "insert into #logs exec('dbcc sqlperf (logspace)')"

不起作用的代码:

  conn.execute "if object_id('tempdb..#mirrors') is not null drop table tempdb..#mirrors"
  conn.execute "create table #mirrors (...'alot of variables)"
  conn.execute "insert into #mirrors exec('msdb..sp_dbmmonitorresults "&db&",1,0')"

在第二个示例中尝试执行插入时出现无效对象错误。包含所有变量的字符串是否可能很长?

我以前从未使用过 Visual Basic,所以这可能是显而易见的。

我尝试在 SQL Server 管理工作室中运行代码,它运行良好。

有人有什么想法吗?

G

【问题讨论】:

  • 第一组VB代码按原样成功运行还是只有在SSMS中运行SQL代码才有效?
  • @Tom H 。它按原样运行。第二个示例仅适用于 SSMS
  • 什么是db?它是唯一的变量。
  • @marc 。是的,它是一个带有数据库名称的变量。我检查了发送的字符串,它应该是这样的。

标签: sql vbscript adodb


【解决方案1】:

我找到了解决方案。问题是我有一个打开的“ADODB.recordset”。因此,当我调用“conn.execute”时,它会在每次执行后注销,因为它与以前的会话不同,并且在我插入临时表之前已将其删除。

我是通过使用 SQL 分析器发现的。

感谢您的帮助。

G

【讨论】:

  • 谢谢。我很高兴我不必弄清楚这一点。
【解决方案2】:

问题可能不是您的代码,而是 SQL Server 本身的问题。我认为在某些情况下可能会不正确地安装日志传送对象。如果您阅读西班牙语,那么有一个 MSDN forum discussion 看起来可能很有用。不幸的是,我不懂西班牙语,无法在此防火墙后使用 Google 翻译,也找不到任何其他信息。

我尝试运行您的代码时得到的完整错误:

Msg 208, Level 16, State 1, Procedure sp_dbmmonitorresults, Line 137 Invalid object name 'msdb.dbo.dbm_monitor_data'.

【讨论】:

  • 谢谢,我会调查的。我开始认为没有创建表“#mirrors”。这很奇怪
猜你喜欢
  • 2019-05-26
  • 1970-01-01
  • 2022-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-18
  • 2020-08-07
  • 1970-01-01
相关资源
最近更新 更多