我正在寻找一些建议,如何优化组合sql存储过程。对于第一个查询,我执行insert,对于第二个查询,如果数据存在,我将执行update。我想要做的是将两个存储过程合并为一个,查询将检查数据是否存在而不是update,否则插入一个新行。这是我目前所拥有的:
更新SP:
ALTER PROCEDURE [dbo].[UpdateStep1](@UserId nvarchar(50), @First_Name nvarchar(50), @Last_Name nvarchar(50),
@TitlePosition nvarchar(30))
AS
BEGIN
UPDATE Company_Information
SET First_Name = @First_Name,
Last_Name = @Last_Name,
Title_Position=@TitlePosition,
WHERE UserId = @UserId
END插入SP:
ALTER PROCEDURE [dbo].[InsertStep1](@UserId nvarchar(50), @First_Name nvarchar(50), @Last_Name nvarchar(50),
@TitlePosition nvarchar(30))
AS
BEGIN
INSERT INTO Company_Information(UserId,
First_Name,
Last_Name,
Title_Position)
VALUES
(@UserId,
@First_Name,
@Last_Name,
@TitlePosition)
END因此,我想将两个SP合并为一个,并将SP合并以检查是否已有该UserId的数据,否则将插入新行。谁能帮帮我。感谢大家,祝大家节日快乐,Laziale
发布于 2012-01-02 21:42:17
MERGE Statement?
CREATE PROCEDURE [dbo].[MERGEStep1](@UserId nvarchar(50), @First_Name nvarchar(50), @Last_Name nvarchar(50), @TitlePosition nvarchar(30))
AS
BEGIN
MERGE Company_Information WITH(HOLDLOCK) AS T
USING(SELECT 1 S) S
ON T.UserId = @UserId
WHEN MATCHED THEN UPDATE SET
First_Name = @First_Name,
Last_Name = @Last_Name,
Title_Position=@TitlePosition
WHEN NOT MATCHED THEN
INSERT (UserId, First_Name, Last_Name, Title_Position)
VALUES(@UserId, @First_Name,@Last_Name,@TitlePosition);
END发布于 2012-01-02 21:43:53
请按照以下步骤操作:
正如@gbn所指定的,请注意concurrence issues。
https://stackoverflow.com/questions/8701509
复制相似问题