我知道我可以檢查是否存在數據庫使用...檢查數據庫是否存在,當前的登錄可以訪問
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
......但是,產生與上述相同的錯誤,甚至沒有得到捕獲。這對我來說令人驚訝 - 我希望能夠重新獲得自定義信息。也許你不能在try catch塊中有USE
語句,但無論如何try..catch類似於黑客。
那麼有沒有查詢只返回當前登錄可以訪問的數據庫?我想在SSIS包中使用它來確定數據庫是否存在和可以在繼續之前訪問。由於它是現在編寫的(使用IF EXISTS...
),執行SQL任務返回true,則以下步驟失敗。我更願意執行SQL任務返回false,並且下面的步驟甚至沒有執行。
僅供參考,我正在使用的登錄名僅分配給「公共」服務器角色。