INSERT INTO, если уже существует ОБНОВЛЕНИЕ. из существующего запроса. поставить на работу агента SQL - PullRequest
0 голосов
/ 25 октября 2019

Я постараюсь быть ясным.

У меня есть запрос на получение данных:

select typ_no_store as IDstore, str_name as 'name', (CASE WHEN str_addr2 IS NULL THEN str_addr1 ELSE str_addr2 END) as adresse, str_postal as postalcode 
    from store_type inner join STRFIL on typ_no_store = str_store_no
    where typ_code = 'a'

Это приведет к чему-то вроде этого:

001 Newy store          600 BLVD someht                 G11111    
002 LA store            770 BLVD ests                   G22222    
010 Texas store         112 dsntexists                  G33333   

Мне нужно внести текущие изменения этого результатав новый стол. Я создал имя таблицы «Интернет-магазин» с тем же значением столбца. (IDstore, name, adresse, postalcode)

Мне нужен запрос, который вставит INTO или UPDATE (если идентификатор уже существует) в результате запроса в новую таблицу. Запрос будет выполняться каждые 2 часа на агенте SQL-сервера.

Я пробовал команды, как ЕСЛИ СУЩЕСТВУЮТ, НА ДУБЛИКОВАННОМ КЛЮЧЕ и MERGE, но я не могу заставить его работать. Кажется, что из-за того, что я должен извлекать данные из запроса, а не из типизированных значений или всей таблицы, это не работает.

Есть идеи?

(Извините, если мой английский не ясен, не стесняйтесь задавать вопрос Спасибо !!)

1 Ответ

0 голосов
/ 25 октября 2019

Вы можете использовать MERGE на сервере sql.

;WITH cte
AS
(
  SELECT typ_no_store as IDstore, 
    str_name as 'name', 
    (CASE WHEN str_addr2 IS NULL THEN str_addr1 ELSE str_addr2 END) as adresse, 
    str_postal as postalcode
  FROM store_type
  INNER JOIN STRFIL on typ_no_store = str_store_no
  WHERE typ_code = 'a'
)

MERGE Webstore AS t
USING cte AS s
ON t.IDstore=s.IDstore
WHEN MATCHED THEN UPDATE
  SET t.[name]=s.name,
      t.other fields = s.other fields ...
WHEN NOT MATCHED BY TARGET THEN
  INSERT (IDstore, other fields...)
  VALUES(s.IDstore, s.other fields)
;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...