以下にサンプル 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
そのコードは次のエラーをスローします。
メッセージ 102、レベル 15、状態 1、行 4 'D:\Backup\MyDatabase.bak' 付近の構文が正しくありません。
メッセージ 102、レベル 15、状態 1、行 10 'BEGIN' 付近の構文が正しくありません。
メッセージ 102、レベル 15、状態 1、行 17 ')' 付近の構文が正しくありません。
しかし、コードを BEGIN TRY および BEGIN TRANSACTION ブロックから移動すると、エラーなしで正常に実行されます。
私が達成したいのは、その T-SQL スクリプトを実行することだけです。それが失敗した場合は、電子メール本文でコードが失敗したというエラー メッセージを含む電子メール アカウントに通知を送信します。
これをよりよく達成する方法についての提案は大歓迎です。