0

以下にサンプル T-SQL コードを示します。 BEGIN TRY

BEGIN TRY    
BEGIN TRANSACTION 

    RESTORE FILELISTONLY
    FROM DISK = 'D:\Backup\MyDatabase.bak'
    GO

    ALTER DATABASE MyDatabase
    SET SINGLE_USER WITH
    ROLLBACK IMMEDIATE

    ALTER DATABASE MyDatabase 
    SET RECOVERY Simple

    ----Restore Database
    RESTORE DATABASE MyDatabase
    FROM DISK = 'D:\Backup\MyDatabase.bak'
    WITH MOVE 'MyDatabase' TO 'C:\DataFolder\MyDatabase.mdf',
    MOVE 'MyDatabase_log' TO 'C:\DataFolder\MyDatabase_log.ldf'

    ALTER DATABASE MyDatabase SET MULTI_USER

    GO

    USE [MyDatabase]
    IF NOT  EXISTS (SELECT * FROM sys.database_principals WHERE name = N'user1')
    CREATE USER [user1] FOR LOGIN [user1] WITH DEFAULT_SCHEMA=[user1]
    GO

    EXEC sp_addrolemember 'db_owner',N'user1'
    GO
    COMMIT
    --Send email on successfull execution of script
    USE  [msdb];
    EXEC sp_send_dbmail @profile_name='My Mail Profile',
    @recipients='myemail@mydomain.org',
    @subject='Test subject',
    @query = '',
    @body='Tested successfully.'
    END TRY
    BEGIN CATCH
    --If there is any error in the script, roll back the transaction and also send an error report email notification
    ROLLBACK
    USE  [msdb];
    EXEC sp_send_dbmail @profile_name='My Mail Profile',
    @recipients='myemail@mydomain.org',
    @subject='Test error',
    @body= ERROR_MESSAGE()
    END CATCH

そのコードは次のエラーをスローします。

  1. メッセージ 102、レベル 15、状態 1、行 4 'D:\Backup\MyDatabase.bak' 付近の構文が正しくありません。

  2. メッセージ 102、レベル 15、状態 1、行 10 'BEGIN' 付近の構文が正しくありません。

  3. メッセージ 102、レベル 15、状態 1、行 17 ')' 付近の構文が正しくありません。

しかし、コードを BEGIN TRY および BEGIN TRANSACTION ブロックから移動すると、エラーなしで正常に実行されます。

私が達成したいのは、その T-SQL スクリプトを実行することだけです。それが失敗した場合は、電子メール本文でコードが失敗したというエラー メッセージを含む電子メール アカウントに通知を送信します。

これをよりよく達成する方法についての提案は大歓迎です。

4

2 に答える 2