2012-07-18 14 views
0

我目前正在T/SQL中編寫一份特殊報告。T/SQL EXECUTE AS,如果錯誤爲0x5,則返回

基本上,我有一個包含Windows用戶名的表,我必須爲每個人運行一次存儲過程(使用遊標)。這可以使用EXECUTE AS USER = 'domain\username'輕鬆完成。但是,如果用戶丟失了Windows登錄時生成的表後,我得到以下錯誤:

Could not obtain information about Windows NT group/user 'domain\user', error code 0x5. 

這個錯誤完全停止的過程,這將給我一個錯誤。有沒有辦法忽略這條消息,只是跳到下一個遊標值?

在前進,感謝 貢納爾S.克努森

回答

1

如果您使用SQL 2005或更高版本,可以使用TRY...CATCH (Transact-SQL)。這裏的例子,從所提供的鏈接:

-- Verify that the stored procedure does not already exist. 
IF OBJECT_ID ('usp_GetErrorInfo', 'P') IS NOT NULL 
    DROP PROCEDURE usp_GetErrorInfo; 
GO 

-- Create procedure to retrieve error information. 
CREATE PROCEDURE usp_GetErrorInfo 
AS 
SELECT 
    ERROR_NUMBER() AS ErrorNumber 
    ,ERROR_SEVERITY() AS ErrorSeverity 
    ,ERROR_STATE() AS ErrorState 
    ,ERROR_PROCEDURE() AS ErrorProcedure 
    ,ERROR_LINE() AS ErrorLine 
    ,ERROR_MESSAGE() AS ErrorMessage; 
GO 

BEGIN TRY 
    -- Generate divide-by-zero error. 
    SELECT 1/0; 
END TRY 
BEGIN CATCH 
    -- Execute error retrieval routine. 
    EXECUTE usp_GetErrorInfo; 
END CATCH; 
+0

我會該死的,都試過了同樣的解決方案,但已經忘了使用REVERT之後... (如果任何人有同樣的問題,但revert需求在usp_GetErrorInfo被執行之前[或給予相關的用戶權限]) – 2012-07-18 15:11:08