Как использовать команду слияния - PullRequest
5 голосов
/ 17 июня 2010

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

Если я вызываю звездочку UpdateEmployee и я передаю @Name, @Address, @Phone и @ID.

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

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

(Мы недавно обновились до SQL 2008, поэтому я новичок в команде слияния.)

Ответы [ 2 ]

7 голосов
/ 17 июня 2010

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

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);
5 голосов
/ 17 июня 2010

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

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...