T / SQL EXECUTE AS,如果错误0x5,则恢复

时间:2012-07-18 14:45:49

标签: tsql try-catch execute

我目前正在T / SQL中编写一份特殊报告。

基本上,我有一个包含windows用户名的表,我必须为每个人运行一次存储过程(使用游标)。这可以使用EXECUTE AS USER = 'domain\username'轻松完成。但是,如果用户在生成表后丢失了Windows登录名,则会出现以下错误:

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

此错误会完全停止该过程,这会给我一个错误。有没有办法忽略这条消息,只是跳到下一个光标值?

事先,谢谢 Gunnar S. Knudsen

1 个答案:

答案 0 :(得分: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;