私が考えるもう 1 つの小さなナゲットは、人々が開発し、データベース開発の生産性を高めるのに役立つと思います。ソフトウェア ソリューションを開発するときは、ストアド プロシージャと関数のファンです。実際の CRUD メソッドをデータベース レベルで実装するのが好きです。これにより、アプリケーション ソフトウェア (ビジネス ロジックとデータ アクセス) とデータベース自体の間で作業のバランスをとることができます。宗教戦争を始めたくはありませんが、人々がストアド プロシージャをより迅速に、テンプレートを使用してベスト プラクティスを使用して開発できるようにしたいと考えています。
SQL Server 2005 Management Studio で独自のテンプレートを作成することから始めましょう。まず、Studio でテンプレート エクスプローラーを表示する必要があります。
代替テキスト http://www.cloudsocket.com/images/image-thumb10.png
これにより、以下が表示されます:
代替テキスト http://www.cloudsocket.com/images/image-thumb11.png
代替テキスト http://www.cloudsocket.com/images/image-thumb12.png
代替テキスト http://www.cloudsocket.com/images/image-thumb13.png
IDE によって空のテンプレートが作成されます。テンプレートを編集するには、テンプレートを右クリックして [編集] を選択します。 IDE に空のクエリ ウィンドウが表示されます。テンプレートの実装を挿入できるようになりました。ここに、TRY CATCH を含めるための新しいストアド プロシージャのテンプレートがあります。ストアド プロシージャにエラー処理を含めるのが好きです。 SQL Server 2005 の TSQL に新たに TRY CATCH が追加されたため、データベース コードを含むコードを通じて、この強力な例外処理メカニズムを使用する必要があります。テンプレートを保存すると、新しいテンプレートを使用してストアド プロシージャを作成する準備が整います。
-- ======================================================
-- Create basic stored procedure template with TRY CATCH
-- ======================================================
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE <Procedure_Name, sysname, ProcedureName>
-- Add the parameters for the stored procedure here
<@Param1, sysname, @p1> <Datatype_For_Param1, , int> = <Default_Value_For_Param1, , 0>,
<@Param2, sysname, @p2> <Datatype_For_Param2, , int> = <Default_Value_For_Param2, , 0>
AS
BEGIN TRY
BEGIN TRANSACTION -- Start the transaction
SELECT @p1, @p2
-- If we reach here, success!
COMMIT
END TRY
BEGIN CATCH
-- there was an error
IF @@TRANCOUNT > 0
ROLLBACK
-- Raise an error with the details of the exception
DECLARE @ErrMsg nvarchar(4000), @ErrSeverity int
SELECT @ErrMsg = ERROR_MESSAGE(), @ErrSeverity = ERROR_SEVERITY()
RAISERROR(@ErrMsg, @ErrSeverity, 1)
END CATCH
GO