我目前正在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
答案 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;