【发布时间】:2019-10-16 15:29:44
【问题描述】:
我继承了一个存在于 SQL Server Express 实例中的数据库,并意识到它没有得到备份。由于它是 SQL Server Express 并且没有 SQL Server 代理,我发现这篇文章描述了如何自动备份。 https://support.microsoft.com/en-us/help/2019698/how-to-schedule-and-automate-backups-of-sql-server-databases-in-sql-se
备份脚本工作正常,我可以从 SQL Server Management Studio 成功运行存储过程来创建备份。我的麻烦从步骤 B 开始,使用 sqlcmd。
不管我做什么,都会出错
找不到存储过程“dbo.sp_backupDatabases”
存储过程存在于主数据库中:
另外,我测试了使用系统存储过程之一运行该命令,它也可以正常执行。它似乎找不到我创建的这个自定义存储过程。
我也运行过这个命令:
select * from information_schema.routines
我的存储过程在其中一条记录中找到。
感谢任何帮助!
【问题讨论】:
-
猜测
USE master并使用EXEC master.dbo.sp_backupDatabases ...而不使用[]。也许名称中有空格,或者您正在连接到不同的实例。 -
我之前尝试过这两种方法,有 [],没有,以及几乎所有你能想象到的名称版本。有趣的是,我可以完全执行这个命令吗: sqlcmd -S .\SQL2008R2 -E -Q "EXEC [sys].[sp_datatype_info]" 没有任何花里胡哨,它成功地找到了 SP。我想也许它正在某个地方的缓存表中工作并且需要刷新但不知道如果那是一件事该怎么做。
-
所以很可能是权限问题。您是否使用同一用户通过 SSMS/sqlcmd 进行连接?
-
最后的想法:
EXEC sp_backupDatabases没有架构和数据库 -
见鬼,这在没有数据库和实例名称的情况下工作: sqlcmd -E -Q "EXEC sp_backupDatabases @backupLocation='F:\SQLBackups\',@backupType='F'" 我不知道为什么...但是谢谢!输入一个答案,我可以升级。
标签: sql-server stored-procedures sql-server-express sqlcmd