0

現在、T/SQL で特別レポートを書いています。

基本的に、Windows ユーザー名を含むテーブルがあり、ストアド プロシージャをユーザーごとに 1 回 (カーソルを使用して) 実行する必要があります。これは、 を使用して簡単に実行できますEXECUTE AS USER = 'domain\username'。ただし、テーブルが生成された後にユーザーが Windows ログインを失った場合、次のエラーが発生します。

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

このエラーにより手順が完全に停止し、エラーが発生します。このメッセージを無視して次のカーソル値にスキップする方法はありますか?

事前に、Gunnar S. Knudsen に感謝します。

4

1 に答える 1

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; 
于 2012-07-18T15:01:38.973 に答える