1

在我们记录购票的应用程序中,我们决定如果在订单表格上填写的客户信息与已经存在的记录匹配,那么我们不会在客户表中添加新记录。

我使用 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