如何解决SQL SERVER 2005 USE语句
| 如果USE {invalid_database_name}失败,最好的处理方法是什么?在这种情况下,我想忽略其余的陈述。这样可以避免在错误的数据库上意外运行脚本。 谢谢你的建议!解决方法
要检查数据库是否存在:
IF DB_ID(\"<your database>\" IS NOT NULL
BEGIN
// Your code here
END
或者它是一个存储过程:
IF DB_ID(\"<your database>\" IS NULL
BEGIN
RETURN
END
那比在sysobjects中搜索更好。
, 在SSMS中以SQLCMD模式运行脚本并使用:on error exit
。如果您通过应用程序运行脚本,请使用sqlcmd模式兼容的库,例如dbutilsqlcmd。
编辑
缺少许多建议各种形式的IF
和RETURN
和sp_executesql
的答案是,它们仅解决了不执行批处理(由the6ѭ分隔的序列)的问题。当谈论脚本时,这没有什么帮助。验证数据库是否存在的批处理将跳过语句,很好,但是脚本中的下一个批处理将继续并在当前数据库而不是所需数据库中执行其所做的任何操作(例如,创建表)。在每个批次的开始处添加支票非常乏味且容易出错,因此通常无法将整个脚本放在一个批次中。最好的解决方案是简单地执行USE <inexisting name>
并依靠:on error exit
在第一个错误时中断脚本执行。
, 您需要检查名称是否存在的数据库
IF EXISTS (SELECT 1 FROM master.dbo.sysdatabases
WHERE (\'[\' + name + \']\' = @dbname OR name = @dbname))
BEGIN
--Your Code here
[USE myDatabase]
END
, 试试这个
begin try
declare @use nvarchar(50)
set @use= \'use MyDB\'
exec sp_executesql @use
select top 1 * from MyDB.dbo.TableA
end try
begin catch
print @@ERROR --Error Number of Database not Found
print Error_message() -- Proper Message
end catch
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。