我知道我可以使用...检查数据库是否存在
SELECT * FROM sys.databases WHERE name = 'database_name'
or...
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 包中使用它来确定数据库是否存在and可以在继续之前访问。正如现在所写的(使用IF EXISTS...
),执行 SQL 任务返回 true,则以下步骤失败。我宁愿执行 SQL 任务返回 false,并且以下步骤甚至不执行。
作为参考,我使用的登录名仅分配给“公共”服务器角色。
try:
Select HAS_DBACCESS('YourDatabaseNameHere')
如果返回 1,则登录名具有访问权限。 0表示无访问权限。 NULL 表示数据库不存在。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)