Нужно в T1 добавить или обновить записи согласно записям в таблице T2. При обновлении Status устанавливается на 1
Т.е. после обработки должно получится в T1:
Поля ID, Status
Значения A, 1 -- ничего не делали
B, 1 -- изменили статус
E, 3 -- ничего не делали
C, 1 -- добавили запись
Как такое проще всего сделать в T-SQL (SQl Server от 2005), а то что то через курсоры как-то сложно выходит.
Уверен можно очень просто следать.
Здравствуйте, SeLo, Вы писали:
SL>Есть таблица (T1) которую нужно обновить
SL>Поля ID, Status SL>Значения A, 1 SL> B, 2 SL> E, 3
SL>Есть другая таблица (T2), которая содержит IDs:
SL>Поля ID SL>Значения A SL> B SL> C
SL>Нужно в T1 добавить или обновить записи согласно записям в таблице T2. При обновлении Status устанавливается на 1 SL>Т.е. после обработки должно получится в T1:
SL>Поля ID, Status SL>Значения A, 1 -- ничего не делали SL> B, 1 -- изменили статус SL> E, 3 -- ничего не делали SL> C, 1 -- добавили запись
SL>Как такое проще всего сделать в T-SQL (SQl Server от 2005), а то что то через курсоры как-то сложно выходит. SL>Уверен можно очень просто следать.
Если я Вас правильно понял, то у Вас два пути:
UPDATE T SET
T.STATUS=1
FROM DBO.T1 AS T
JOIN DBO.T2 AS X ON T.ID=X.ID
или
MERGE INTO dbo.T1 AS TGT
USING dbo.T2 AS SRC
ON TGT.ID=SRC.ID
WHEN MATCHED THEN UPDATE SET
TGT.STATUS=1
WHEN NO MATCHED THEN INSERT (ID,STATUS) VALUES(SRC.ID,1);
L>Если я Вас правильно понял, то у Вас два пути: L>UPDATE T SET L>T.STATUS=1 L>FROM DBO.T1 AS T L>JOIN DBO.T2 AS X ON T.ID=X.ID
L>или L>MERGE INTO dbo.T1 AS TGT L>USING dbo.T2 AS SRC L>ON TGT.ID=SRC.ID L>WHEN MATCHED THEN UPDATE SET L>TGT.STATUS=1 L>WHEN NO MATCHED THEN INSERT (ID,STATUS) VALUES(SRC.ID,1);
Merge не подходит, т.к Server от 2005 версии
До скрипта с Update дошел сам, но спасибо за ваш вариант, теперь знаю что верно.
Скрипт для добавления новых выглядит так:
INSERT INTO T1 (ID, Status)
Select T2.ID, 1
FROM T2 LEFT JOIN jT1 ON T2.ID = jT1.ID WHERE jT1.ID IS NULL