チケットの購入を記録するアプリケーションでは、注文フォームに入力された顧客の情報が既存のレコードと一致する場合、Customer テーブルに新しいレコードを追加しないことにしました。
MERGE (SQL Server 2008) を使用して、レコードが一致しない場合にのみ挿入しています。レコードが一致する (挿入されない) 場合、またはレコードが挿入されて新しい CustomerID が作成される場合は、CustomerID を出力する必要があります。これについて適切な方法はありますか?
CREATE PROCEDURE [dbo].[uspMergeCustomer]
-- Add the parameters for the stored procedure here
@lastName varchar(40),
@firstName varchar(30),
@email varchar(50),
@emailNote varchar(100) = null,
@address1 nvarchar(200) = null,
@address2 nvarchar(50),
@city nvarchar(50),
@state char(2),
@zip char(10)
AS
BEGIN
SET NOCOUNT ON;
MERGE Customer WITH (HOLDLOCK)
USING (VALUES (@lastName, @firstName, @email, @emailNote, @address1, @address2, @city, @state, @zip))
Source (LastName, FirstName, Email, EmailNote, AddressLine1, AddressLine2, City, State, Zip)
ON (Customer.LastName = Source.LastName
AND Customer.FirstName = Source.FirstName
AND Customer.Email = Source.Email
AND Customer.AddressLine1 = Source. AddressLine1
AND Customer.City = Source.City
AND Customer.State = Source.State
AND Customer.Zip = Source.Zip)
WHEN NOT MATCHED THEN
INSERT (LastName, FirstName, Email, EmailNote, AddressLine1, AddressLine2, City, State, Zip)
VALUES (@lastName, @firstName, @email, @emailNote, @address1, @address2, @city, @state, @zip)
OUTPUT INSERTED.CustomerID AS NEWID;
END