upsert sql запрос - PullRequest
       3

upsert sql запрос

10 голосов
/ 02 января 2012

Я ищу несколько советов, как оптимизировать пару хранимых процедур sql.С первым запросом я делаю вставку, а со вторым я делаю обновление, если данные существуют.То, что я хочу сделать, это объединить обе хранимые процедуры в одну, где запрос проверит, существуют ли данные, чем обновить, иначе вставьте новую строку.Вот что у меня есть в это время:

обновление 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, чем update, иначе вставьте новую строку.Может кто-нибудь, пожалуйста, помогите мне с этим.Всем спасибо и счастливых праздников, Лазиале

Ответы [ 2 ]

18 голосов
/ 02 января 2012

Заявление MERGE?

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
0 голосов
/ 02 января 2012

Выполните следующие действия:

  1. Создать переменную для проверки (например, @id)
  2. Выберите @id = UserId из Company_Information, где UserId = @ UserId
  3. Если @id = @userId update, в противном случае вставьте

Как указано @gbn, помните о проблемах совпадения .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...