Как использовать команду слияния

Скажите, что мне назвали таблицу Employee (имеет ID, NAME, ADDRESS, и PHONE столбцы). (Не моя настоящая проблема, но упрощенный для создания вопроса легче.)

Если я называю sproc названным UpdateEmployee и я передаю в a @Name, @Address, @Phone и @ID.

Слияние может использоваться для легкой проверки, чтобы видеть, существует ли идентификатор? Если это делает для обновления имени, обратитесь и позвоните? и если это не делает для вставки их?

Я вижу примеры в сети, но они являются огромными и волосатыми. Я хотел бы хороший простой пример, если это возможно.

(Мы недавно обновили до SQL 2008, таким образом, я плохо знаком с командой слияния.)

5
задан Oded 16 June 2010 в 20:11
поделиться

2 ответа

Код Билла Карвина почти правильный. Я внес необходимые изменения. Играя со значениями переменных, вы сможете увидеть его в действии. Таблица:

CREATE TABLE [dbo].[employee](
    [ID] [int] NULL,
    [Name] [char](20) NULL,
    [Address] [char](20) NULL,
    [Phone] [int] NULL
) ON [PRIMARY]

Код:

DECLARE @ID int, @NAME char(20), @ADDRESS char(20), @PHONE int
SET @ID=2
SET @NAME='Jenny'
SET @ADDRESS='11 My St'
SET @PHONE=228326

MERGE Employee AS target
USING (SELECT @ID, @NAME, @ADDRESS, @PHONE) AS source (ID, Name, Address, Phone)
ON (target.ID = source.ID)
WHEN MATCHED THEN
  UPDATE SET NAME    = source.Name,
             ADDRESS = source.Address,
             PHONE   = source.Phone
WHEN NOT MATCHED THEN
  INSERT (ID, NAME, ADDRESS, PHONE) 
  VALUES (source.ID, source.Name, source.Address, source.Phone);
7
ответ дан 18 December 2019 в 16:36
поделиться

Я не тестировал это, но, основываясь на документах , это может привести вас на верный путь:

MERGE myschema.Employee AS target
USING (SELECT @ID, @NAME, @ADDRESS, @PHONE) AS source (ID, Name, Address, Phone)
ON (target.ID = source.ID)
WHEN MATCHED THEN
  UPDATE SET NAME    = source.Name
             ADDRESS = source.Address
             PHONE   = source.Phone
WHEN NOT MATCHED THEN
  INSERT (ID, NAME, ADDRESS, PHONE) 
  VALUES (source.ID, source.Name, source.Address, source.Phone)
5
ответ дан 18 December 2019 в 16:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: