我正在尝试监视数据库的镜像副本。我正在运行一个能够执行其他检查的脚本,其中一些非常类似于导致我出现问题的一个。
有效的代码:
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 manegment studio中运行代码,它运行正常。
有没有人有任何想法?
答案 0 :(得分:3)
我找到了解决方案。问题是我有一个开放的“ADODB.recordset”。因此,当我调用“conn.execute”时,它会在每次执行后退出,因为它与之前的会话不同,临时表在我插入之前就被删除了。
我通过使用SQL分析器找到了。
感谢您的帮助。
答案 1 :(得分:1)
问题可能不是您的代码,而是SQL Server本身的问题。我认为有些情况下日志传送对象可能会被错误地安装。如果您阅读西班牙语,那么有一个MSDN forum discussion看起来可能有用。不幸的是,我不读西班牙语,我不能在这个防火墙后面使用谷歌翻译,而且我找不到任何有关它的信息。
我尝试运行代码时遇到的完整错误:
Msg 208, Level 16, State 1, Procedure sp_dbmmonitorresults, Line 137
Invalid object name 'msdb.dbo.dbm_monitor_data'.