SQL Server で INSERT と UPDATE を行うストアドプロシージャの作成 - サンプルコード
SQL Server で INSERT と UPDATE を行うストアドプロシージャの作成
このチュートリアルでは、SQL Server で INSERT と UPDATE を行うストアドプロシージャの作成方法を説明します。ストアドプロシージャを使用すると、コードを再利用し、データベース操作を効率化できます。
前提条件
- SQL Server Management Studio (SSMS) がインストールされていること
- SQL Server データベースへの接続権限
手順
- SSMS を開き、データベースに接続します。
- オブジェクトエクスプローラーで、ストアドプロシージャ フォルダを展開します。
- 右クリックして、新しいストアドプロシージャ を選択します。
- ストアドプロシージャの名前を入力します (例:
InsertUpdatePerson
)。 - クエリ エディター ウィンドウが開きます。
INSERT
-- INSERT ステートメント
INSERT INTO Person (FirstName, LastName, Age)
VALUES (@FirstName, @LastName, @Age)
UPDATE
-- UPDATE ステートメント
UPDATE Person
SET FirstName = @FirstName,
LastName = @LastName,
Age = @Age
WHERE PersonID = @PersonID
パラメータ
上記の例では、@FirstName
、@LastName
、@Age
、@PersonID
はストアドプロシージャのパラメータです。これらのパラメータは、ストアドプロシージャを実行時に渡されます。
ストアドプロシージャの作成
- クエリ エディターで、上記の INSERT と UPDATE ステートメントを記述します。
- ツールバー の 保存 ボタンをクリックして、ストアドプロシージャを作成します。
- 実行 を選択します。
- パラメータ値を入力し、OK をクリックします。
確認
データベースに接続されている別のツールを使用して、データが正しく挿入および更新されていることを確認します。
- より複雑な処理を行う場合は、条件分岐やループ処理などを組み合わせて記述できます。
- エラー処理を行うこともできます。
USE [YourDatabaseName]
GO
CREATE PROCEDURE [InsertUpdatePerson]
(
@FirstName NVARCHAR(50),
@LastName NVARCHAR(50),
@Age INT,
@PersonID INT
)
AS
BEGIN
-- INSERT ステートメント
INSERT INTO Person (FirstName, LastName, Age)
VALUES (@FirstName, @LastName, @Age)
-- UPDATE ステートメント
IF @PersonID IS NOT NULL
BEGIN
UPDATE Person
SET FirstName = @FirstName,
LastName = @LastName,
Age = @Age
WHERE PersonID = @PersonID
END
END
GO
このストアドプロシージャを実行するには、以下の手順を実行します。
InsertUpdatePerson
ストアドプロシージャを右クリックします。- パラメータ値を入力します。
- OK をクリックします。
例:
EXEC InsertUpdatePerson
@FirstName = 'John',
@LastName = 'Doe',
@Age = 30,
@PersonID = 1
この例では、Person
テーブルに John Doe
という名前、30 歳という年齢の新しいレコードが追加されます。
- エラー処理を行うことを忘れないでください。
MERGE ステートメントは、INSERT と UPDATE を単一のステートメントで実行できます。
USE [YourDatabaseName]
GO
CREATE PROCEDURE [InsertUpdatePerson]
(
@FirstName NVARCHAR(50),
@LastName NVARCHAR(50),
@Age INT,
@PersonID INT
)
AS
BEGIN
MERGE Person AS T
USING (VALUES (@FirstName, @LastName, @Age)) AS S
ON T.PersonID = S.PersonID
WHEN MATCHED THEN
UPDATE SET
FirstName = S.FirstName,
LastName = S.LastName,
Age = S.Age
WHEN NOT MATCHED THEN
INSERT (FirstName, LastName, Age)
VALUES (S.FirstName, S.LastName, S.Age);
END
GO
OUTPUT 句を使用する
OUTPUT 句を使用すると、INSERT または UPDATE ステートメントによって影響を受けた行を取得できます。
USE [YourDatabaseName]
GO
CREATE PROCEDURE [InsertUpdatePerson]
(
@FirstName NVARCHAR(50),
@LastName NVARCHAR(50),
@Age INT,
@PersonID INT
)
AS
BEGIN
DECLARE @InsertedRows INT
-- INSERT ステートメント
INSERT INTO Person (FirstName, LastName, Age)
OUTPUT INSERTED.PersonID INTO @InsertedRows
VALUES (@FirstName, @LastName, @Age)
IF @InsertedRows > 0
BEGIN
-- 新しいレコードが挿入された場合の処理
END
-- UPDATE ステートメント
UPDATE Person
SET FirstName = @FirstName,
LastName = @LastName,
Age = @Age
OUTPUT UPDATED.PersonID INTO @InsertedRows
WHERE PersonID = @PersonID
IF @InsertedRows > 0
BEGIN
-- レコードが更新された場合の処理
END
END
GO
TRY/CATCH ブロックを使用する
TRY/CATCH ブロックを使用すると、エラー処理を行うことができます。
USE [YourDatabaseName]
GO
CREATE PROCEDURE [InsertUpdatePerson]
(
@FirstName NVARCHAR(50),
@LastName NVARCHAR(50),
@Age INT,
@PersonID INT
)
AS
BEGIN
BEGIN TRY
-- INSERT ステートメント
INSERT INTO Person (FirstName, LastName, Age)
VALUES (@FirstName, @LastName, @Age)
-- UPDATE ステートメント
UPDATE Person
SET FirstName = @FirstName,
LastName = @LastName,
Age = @Age
WHERE PersonID = @PersonID
END TRY
BEGIN CATCH
-- エラーが発生した場合の処理
END CATCH
END
GO
sql sql-server stored-procedures