ALTER PROCEDURE [dbo].[spCustomerSave]
(
@CustomerID int = null,
@CustomerName nvarchar(50),
@New_ID int output
)
AS
BEGIN
IF EXISTS(SELECT 1 FROM tblCustomer WHERE CustomerID = @CustomerID)
BEGIN
UPDATE tblCustomer
SET
CustomerName = @CustomerName
WHERE
CustomerID = @CustomerID;
SELECT @New_ID = @CustomerID;
END
ELSE
BEGIN
INSERT INTO tblCustomer(
Taalnaam)
VALUES(
@CustomerName)
SELECT @New_ID = scope_identity();
END
END
将其转换为使用MERGE语句的语法。
ALTER PROCEDURE [dbo].[spCustomerSave]
(
@CustomerID int = null,
@CustomerName nvarchar(50),
@New_ID int output
)
AS
BEGIN
SELECT @New_ID = @idTaal;
MERGE dbo.tblCustomer as target
USING (SELECT @CustomerID, @CustomerName) as source (CustomerID, CustomerName)
ON (target.CustomerID = source.CustomerID)
WHEN MATCHED THEN
UPDATE SET
CustomerName = @CustomerName
WHEN NOT MATCHED THEN
INSERT (CustomerName)
VALUES(source.CustomerName);
SELECT @New_ID = scope_identity();
END
问题:
这样做会在性能方面对我们有益吗?(避免在主键上进行初始SELECT)
这是MERGE语句的正确使用方式吗?大多数示例都显示MERGE语句用于执行多个DML操作的情况。