2009-07-23 2 views
1

Я управляю хранилищем данных. У меня есть несколько таблиц измерений, большинство из которых относятся к типу 2, а некоторые относятся к типу 1.Обновление размера Type-2 с помощью команды MERGE

Мне удалось выяснить, как использовать MERGE для поддержки таблиц измерения типа 1.

Я не понимаю, как сделать таблицы размеров типа 2.

Как мне сделать, как обновить EndDate и вставить с помощью команды MERGE?

ответ

2

MERGE, к сожалению, не позволит вам применить несколько действий к одному условию или позволить вам работать несколько раз в одной строке.

Итак, что я делаю, это использовать INSERT INTO подведению MERGE:

INSERT INTO DimTable 
SELECT ID, Name, StartDate, null as EndDate 
FROM 
    (
     MERGE DimTable AS tgt 
     USING StageTable AS src 
      ON tgt.id = src.id AND tgt.enddate IS NULL 
     WHEN MATCHED THEN 
      UPDATE SET tgt.enddate = src.startdate 
     WHEN NOT MATCHED THEN 
      INSERT INTO (ID, Name, StartDate) 
       VALUES (src.id, src.name, src.startdate) 
     OUTPUT $action as Action, src.ID, src.Name, src.StartDate 
    ) a 

WHERE 
    a.Action = 'UPDATE' 

Ключ есть OUTPUT положение, которое будет на самом деле перенаправить эти строки, так что вы знаете точно , что случилось с ними. Отличная особенность, действительно.

+0

@ Эрик: на самом деле, это позволит мне выдавать несколько команд на NO MATCH, но не позволит мне иметь несколько команд в MATCH. посмотрите этот пример BOL. ms-help: //MS.SQLCC.v10/MS.SQLSVR.v10.en/s10de_1devconc/html/952595a6-cf1d-4ff5-8927-66f9090cf79d.htm –

+0

Эта ссылка не работает для меня, но я изменил его, чтобы использовать одну команду 'merge', заключенную в' insert into'. Я на самом деле использовал это, но полностью забыл, когда я впервые ответил. – Eric

+0

@ Эрик, чувак .. ты БОМБ –