[英]SQL SERVER 2005 USE statement
如果 USE {invalid_database_name} 失败,最好的处理方法是什么? 在这种情况下,我想忽略语句的 rest。 这是为了避免意外地在错误的数据库上运行脚本。 谢谢你的建议!!!
在 SSMS 中以SQLCMD 模式运行脚本并使用:on error exit
。 如果从应用程序运行脚本,请使用与 sqlcmd 模式兼容的库,例如dbutilsqlcmd 。
编辑
许多推荐IF
和RETURN
和sp_executesql
的各种 forms 的响应缺少的是,它们仅解决不执行批处理的问题(由GO
分隔的序列)。 这在谈论脚本时帮助不大。 验证数据库存在的批处理将跳过语句,很好,但是脚本中的下一个批处理将继续并在当前数据库中执行它所做的任何事情(例如,创建表),而不是在所需的数据库中。 在每个批次的请求中添加检查是乏味且容易出错的,将整个脚本放在一个批次中通常是不可能的。 最好的解决方案是简单地执行一个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
检查数据库是否存在:
IF DB_ID("<your database>" IS NOT NULL
BEGIN
// Your code here
END
或者如果它是一个存储过程:
IF DB_ID("<your database>" IS NULL
BEGIN
RETURN
END
这比在 sysobjects 中搜索要好。
尝试使用这个
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.