2017-01-16 34 views
1

我在我的崗位部署腳本在Visual Studio 2013以下:的SQL Server DROP角色

-- Drop existing role and create again to be up to date 
DROP ROLE payments_data_access_role 
GO 

CREATE ROLE payments_data_access_role 
GO 

然而,當我發佈從VS數據庫中,我得到那個角色「payments_data_access_role」不存在錯誤。

我該如何重寫這個,如果角色存在,放下角色然後重新定義角色?

謝謝。

更新:我嘗試以下和它的工作:

IF IS_ROLEMEMBER ('payments_data_access_role') IS NOT NULL 
    DROP ROLE payments_data_access_role 

CREATE ROLE payments_data_access_role 
GO 

這是正確的做法?你能提供一下你的看法嗎?謝謝。

回答

0

IS_ROLEMEMBER會像你使用它一樣工作。

對於部署,我只想把它包在一個try/catch:

BEGIN TRY 
    PRINT 'Trying to drop role paymens_data_access_role...'; 
    DROP ROLE payments_data_access_role; 
    Print 'Role payments_data_access_role dropped.'; 
END TRY 
BEGIN CATCH 
    PRINT 'Role payments_data_access_role does not exist, not dropping...'; 
END CATCH; 

CREATE ROLE payments_data_access_role; 

這樣,你在你的部署日誌得到反饋,並誤差不停止執行。它也更清楚地表明,與使用檢查用戶是否屬於某個角色的函數相比,意圖是什麼。在將來有一段時間你不得不回到這段代碼,或者下一個破譯你的代碼的人時,可能會讓你更容易在將來出現。

+0

從我的角度看起來很不錯。我同意你所說的一切。感謝您的幫助。 – Guygar