小编mr.*_*and的帖子

检查数据库是否存在且当前登录可以访问

我知道我可以检查数据库是否存在使用...

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,并且甚至不执行以下步骤.

作为参考,我使用的登录名仅分配给"公共"服务器角色.

t-sql sql-server ssis

2
推荐指数
1
解决办法
1488
查看次数

标签 统计

sql-server ×1

ssis ×1

t-sql ×1