プログラミングと日々思ったことなど

ブログ名通りです。仕事でプログラミングをはじめました。

SqlServerでストアドプロシージャを作成する

ストアドプロシージャを作成したので、復習です。
このストアドプロシージャはインサート処理と、エラー表示を行います(多分・・・)。

USE [AA_DB]
GO

CREATE PROCEDURE [aa]
	(@log VARCHAR(5)				--パラメータを宣言
	,@name VARCHAR(30)
	,@suuzi  int				
	,@MsgReturn VARCHAR(2000) OUTPUT
	)

AS
	DECLARE @SQL NVARCHAR(4000)		--変数を宣言
	DECLARE @DefMsg VARCHAR(1000)
	DECLARE @ReturnVal int
	DECLARE @Err INTEGER

BEGIN
	SET @DefMsg='ストアドエラー'
	SET @ReturnVal = 2                     --失敗したら2がかえってくる

	/** 引数チェック **/
	IF(@log IS NULL OR @log = '' OR
		@name IS NULL OR @name = '' OR
		)
	BEGIN
		SET @MsgReturn = @DefMsg + '引数未設定'
		RETURN @ReturnVal
	END

	BEGIN TRY

	SET @SQL = N'INSERT INTO [AA] VALUES
		('''+ @log + ''''			--引数を文字列として認識するための、コーテーション
		+N',''' + @name +''''	--NはUnicodeとして処理させるためにつける
		+N',' + CAST(@suuizi AS VARCHAR)+N''')' --数値を文字列と認識させるために、キャストする。
	EXECUTE @Err = sp_executeaql @SQL --@Errに、インサートが失敗したのか成功したのかわかる値が入っている
	IF @Err <> 0
	BEGIN
		SET @MsgReturn = @DefMsg + 'インサート失敗'
		RETURN @ReturnVal
	END

	SET @ReturnVal = 0

	END TRY
	BEGIN CAHTCH
		SET @MsgReturn = @DefMsg + '[ERROR_NUMBER]'+@SQL
		RETURN @ReturnVal
	END CAHTCH
END

GO

変数とパラメータが、少しだけ混乱する時があるので気をつけます。