воскресенье, 5 сентября 2010 г.

Сравнение текста процедур, представлений, функций и т.д. в двух базах




--Коллеги из филиала спросили "как понять, какие процедуры изменились?"
--К счастью, на том же сервере присутствует база, которую можно считать "эталоном".
--Вместо Base1 и Base2 подставить требуемые базы данных, в том числе можно --сравнивать определения объектов на linked серверах.
--В этом случае не нужно применять сторонние утилиты - достаточно одного запроса: T---SQL:


SELECT o.name
FROM sys.objects o
LEFT join sys.columns col ON col.OBJECT_ID = o.OBJECT_ID
WHERE o.type = 'U'
and col.name like 'Date'
ORDER BY o.nameSELECT
   isnull(s1.name+'.'+o1.[name], s2.name+'.'+o2.[name]) ,
   CASE
      WHEN o1.[OBJECT_ID] IS null THEN 'только во второй'
      WHEN o2.[OBJECT_ID] IS null THEN 'только в первой'
   ELSE 'объект изменен' END
FROM Base1.sys.sql_modules m1
INNER join Base1.sys.objects o1
ON o1.[OBJECT_ID] = m1.[OBJECT_ID]
LEFT join Base1.sys.schemas s1
   ON s1.[schema_id] = o1.[schema_id]
FULL join Base2.sys.sql_modules m2
   INNER join Base2.sys.objects o2
      ON o2.[OBJECT_ID] = m2.[OBJECT_ID]
   LEFT join Base2.sys.schemas s2
      ON s2.[schema_id] = o2.[schema_id]
ON s1.name+'.'+o1.[name] = s2.name+'.'+o2.[name]
WHERE isnull(m1.definition, '') <> isnull(m2.definition, '+')

Комментариев нет:

Отправить комментарий