我知道我可以使用...检查数据库是否存在
SELECT * FROM sys.databases WHERE name = 'database_name'
或者...
SELECT DB_ID('database_name')
无论当前登录是否有权访问database_name
. 例如,如果当前登录没有访问权限,则此语句...
USE database_name
...可以理解的是,此消息会失败:
The server principal "login_name" is not able to access the database "database_name" under the current security context.
我想要的是一个查询,告诉我当前登录是否可以访问当前数据库。我试着用 try catch 包裹起来......
begin try
use database_name;
end try
begin catch
select 'cannot access database_name'
end catch
...但这会产生与上述相同的错误,甚至没有抓住问题。这让我感到惊讶——我希望能得到自定义消息。也许您不能USE
在 try catch 块中包含语句,但无论如何,try..catch 似乎有点像 hack。
那么是否有一个查询只返回当前登录可以访问的数据库?我想在 SSIS 包中使用它来确定数据库是否存在并且可以在继续之前访问。正如现在所写的那样(使用IF EXISTS...
),执行 SQL 任务返回 true,然后以下步骤失败。我宁愿执行 SQL 任务返回 false,甚至不执行以下步骤。
作为参考,我使用的登录名仅分配给“公共”服务器角色。