我有一个包含 USE DATABASE
语句的脚本。
如果数据库存在,该脚本运行得很好。如果它不存在,则会失败并显示消息“数据库不存在”,这是完全有道理的。
现在,我不想让它失败,所以我添加了一个检查来选择数据库是否存在于 sys.databases 上(为了方便起见,我将在此处用 IF 1=2
检查来表示它)简单起见),因此,如果数据库存在(1=1),则运行“use”语句。
令我惊讶的是,脚本不断失败。所以我尝试添加一个 TRY CATCH block 。相同的结果。 似乎 use 语句是在其他任何事情之前进行评估的,这很烦人,因为现在我的脚本可能会中断。
所以我的问题是:如何在可能不存在的数据库的脚本上使用 use
语句?
BEGIN TRY
IF (1=1) BEGIN --if DB exists
USE DB_THAT_MAY_NOT_EXIST
END
END TRY
BEGIN CATCH
END CATCH
最佳答案
我不相信你能做你想做的事。 documentation指定 use
在编译时和执行时执行。
因此,在不存在的数据库上使用
将会产生编译时错误。我不知道有什么方法可以绕过编译时错误。
正如另一个答案所建议的,在所有名称中使用数据库限定符。
您还可以检查数据库是否存在,而无需切换到它。这是一种方法:
begin try
exec('use dum');
print 'database exists'
end try
begin catch
print 'database does not exist'
end catch
关于sql - 使用可能不存在的数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14200166/