Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как проверить изменения в таблице?  [new]
MLans
Member

Откуда:
Сообщений: 396
Здравствуйте, у нас есть 2 таблицы


Таблица1
ID FirstName LastName
1 Иван Иванов
2 Максим Петров

Таблица2
ID FirstName LastName Changes
1 Иван Петров
2 Николай Васильев


нужно проставить в таблице 2 в поле Changes значения в зависимости от того, какие данные были изменены - только фамилия (1) или имя и фамилия (2).

Как лучше это сделать?
Можно просто определить изменилась ли запись используя UNION и игруппиря по having count(*), но вот характер этих изменений определить не получается (
18 апр 14, 19:30    [15903043]     Ответить | Цитировать Сообщить модератору
 Re: Как проверить изменения в таблице?  [new]
Glory
Member

Откуда:
Сообщений: 104751
MLans
Как лучше это сделать?

Запросом. С помощью join-а
18 апр 14, 19:36    [15903054]     Ответить | Цитировать Сообщить модератору
 Re: Как проверить изменения в таблице?  [new]
aleks2
Guest
MLans
но вот характер этих изменений определить не получается

Паника! Паника!! Паника!!!

update t2 set Changes = case 
                                           when t2.FirstName = t1.FirstName and t2.LastName = t1.LastName then 0
                                           when t2.FirstName = t1.FirstName and t2.LastName <> t1.LastName then 1
                                           when t2.FirstName <> t1.FirstName and t2.LastName <> t1.LastName then 2
                                           else 'Паника! Паника!! Паника!!!'
                                         end
  from Таблица2 t2 inner join Таблица1 t1 on t2.ID = t1.ID
  -- если 0 не надо в Changes
  -- and  ( t2.FirstName <> t1.FirstName or t2.LastName <> t1.LastName)
;
19 апр 14, 06:55    [15904128]     Ответить | Цитировать Сообщить модератору
 Re: Как проверить изменения в таблице?  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3265
MLans,

Фигнёй не страдать и сделать таблицу лога изменений
19 апр 14, 10:57    [15904320]     Ответить | Цитировать Сообщить модератору
 Re: Как проверить изменения в таблице?  [new]
MLans
Member

Откуда:
Сообщений: 396
Спасибо за ответы, еще один вопрос, а если в таблице нет соответствующей запсили, как это можно определить и проставить соотвтетствующий флаг в таблицу 1?
24 апр 14, 19:02    [15931599]     Ответить | Цитировать Сообщить модератору
 Re: Как проверить изменения в таблице?  [new]
MLans
Member

Откуда:
Сообщений: 396
То есть мне надо отметить данные как
'добавленные' или 'удаленные' или 'измененны'
24 апр 14, 19:05    [15931609]     Ответить | Цитировать Сообщить модератору
 Re: Как проверить изменения в таблице?  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
MERGE	dbo.Table2	T
USING	dbo.Table1	S ON S.ID = T.ID
WHEN	NOT MATCHED BY TARGET	THEN
	INSERT (ID,FirstName,LastName,Changes)
	VALUES (ID,FirstName,LastName,0) -- Inserted
WHEN	NOT MATCHED BY SOURCE	THEN UPDATE SET Changes = 4 -- Deleted
WHEN	    MATCHED AND NOT Exists(SELECT T.FirstName,T.LastName INTERSECT SELECT S.FirstName,S.LastName) -- Updated
				THEN UPDATE SET Changes = CASE WHEN NOT Exists(SELECT T.FirstName INTERSECT SELECT S.FirstName) THEN 1 ELSE 0 END
							+ CASE WHEN NOT Exists(SELECT T.LastName  INTERSECT SELECT S.LastName ) THEN 2 ELSE 0 END
; -- Changes = NULL - not modified
24 апр 14, 23:31    [15932611]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить