繁体   English   中英

SQL SERVER 2005 使用声明

[英]SQL SERVER 2005 USE statement

如果 USE {invalid_database_name} 失败,最好的处理方法是什么? 在这种情况下,我想忽略语句的 rest。 这是为了避免意外地在错误的数据库上运行脚本。 谢谢你的建议!!!

在 SSMS 中以SQLCMD 模式运行脚本并使用:on error exit 如果从应用程序运行脚本,请使用与 sqlcmd 模式兼容的库,例如dbutilsqlcmd

编辑

许多推荐IFRETURNsp_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM