我知道我可以检查数据库是否存在使用...
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.
我想要的是一个查询,告诉我当前登录是否可以访问当前数据库.我试着试试包裹......
begin try
use database_name;
end try
begin catch
select 'cannot access database_name'
end catch
Run Code Online (Sandbox Code Playgroud)
...但是产生与上面相同的错误,甚至没有得到捕获.这对我来说很惊讶 - 我希望能够收到自定义消息.也许你不能USE在try catch块中包含语句,但无论如何,try..catch类似于hack.
那么是否有一个查询只返回当前登录可以访问的数据库?我想在SSIS包中使用它来确定数据库是否存在并且可以在继续之前访问.在现在写入(使用IF EXISTS...)时,执行SQL任务返回true,然后执行以下步骤失败.我更倾向于执行SQL任务返回false,并且甚至不执行以下步骤.
作为参考,我使用的登录名仅分配给"公共"服务器角色.