1. ホーム
  2. データベース
  3. mssql2008

SQLServer 2008 データ挿入・更新用ストアドプロシージャ

2022-01-08 11:14:25

ストアドプロシージャは非常に強力で、ビジネスロジック層をある程度置き換えることができます。

ここでは、ストアドプロシージャを使用してステートメントを挿入または更新する小さな例を示します。

1. データベースのテーブル構造

使用するデータベースは、Sql Server 2008です。

2. ストアドプロシージャを作成する

(1)の機能を実現するために 1)は、同じデータを持って、直接(戻り値:0)を返します。

       (2)同じ主キーがありますが、データは別のデータ、更新処理(戻り値:2)です。

       3) データがない場合、データ挿入処理(戻り値:1)。

異なるケースに応じてプロシージャの戻り値を設定し、異なる戻り値に応じて該当する処理を施したプロシージャを呼び出す。

(2) 以下のコードは基本機能のみを実装したもので、具体的なSqlのコードは以下の通りです。

 Create proc sp_Insert_Student
   @No char(10),
   @Name varchar(20),
   @Sex char(2),
   @Age int,
   @rtn int output
 as
 declare
   @tmpName varchar(20),
  @tmpSex char(2),
  @tmpAge int
  
  if exists(select * from Student where No=@No)
    begin
      select @tmpName=Name,@tmpSex=Sex,@tmpAge=Age from Student where No=@No
      if ((@tmpName=@Name) and (@tmpSex=@Sex) and (@tmpAge=@Age))
        begin
          set @rtn=0 -- with the same data, return the value directly
        end
      else
        begin
          update Student set Name=@Name,Sex=@Sex,Age=@Age where No=@No
          set @rtn=2 ---with the same primary key, update the data
        end
    end
  else
    begin
      insert into Student values(@No,@Name,@Sex,@Age)
      set @rtn=1 --no identical data, insert
    end

3. ストアドプロシージャの呼び出し

ここで、Sql Serverの環境では、呼び出しの簡単な実装では、プログラムでも呼び出すことは非常に便利です。

具体的なコードは以下の通りです。

 declare @rtn int
 exec sp_Insert_Student '1101','Zhang San','Male',23,@rtn output
 
 if @rtn=0
   print 'The same one already exists.'
 else if @rtn=1
   print 'Inserted successfully.'
 else
   print 'Update successful'

1つのプロシージャで3つのケースを実装しており、非常に効率的かつ柔軟に使用することができます。ご参考になれば幸いです。