1

チケットの購入を記録するアプリケーションでは、注文フォームに入力された顧客の情報が既存のレコードと一致する場合、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
4

0 に答える 0