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

Откуда: Münster, Germany
Сообщений: 1738
Доброе время суток!

Существует ли возможность с большой вероятностью определить что поле таблицы было переименовано?
и если да то по какому критерию это можно узнать?

Спасибо
19 июн 12, 17:54    [12740749]     Ответить | Цитировать Сообщить модератору
 Re: Как определить что поле переименовано  [new]
Crimean
Member

Откуда:
Сообщений: 13147
к примеру, заранее аудит напустить
19 июн 12, 18:04    [12740798]     Ответить | Цитировать Сообщить модератору
 Re: Как определить что поле переименовано  [new]
Mikhail Tchervonenko
Member

Откуда: Münster, Germany
Сообщений: 1738
Crimean,

проще никак? В некоторых платных продуктах определение происходит и без включения аудита.

Мне это нужно при сравнении структуры таблиц дабы если в исходной таблице поле переименовали в целевой из другой базы его тоже переименовать а не удалять и создавать заново. (изначально предполагается что таблицы и базы были идентичны (целевая была получена восстановлением из резервной копии исходной базы)).

Спасибо.
19 июн 12, 18:35    [12740994]     Ответить | Цитировать Сообщить модератору
 Re: Как определить что поле переименовано  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
Mikhail Tchervonenko, ну так найти различия в структуре двух баз это одно (и для этого есть куча утилит, в том числе бесплатных), а определить сам факт переименования - это другое.
например, если у двух полей одного типа некий злодей поменял местами имена
19 июн 12, 18:43    [12741041]     Ответить | Цитировать Сообщить модератору
 Re: Как определить что поле переименовано  [new]
invm
Member

Откуда: Москва
Сообщений: 9833
Mikhail Tchervonenko
В некоторых платных продуктах определение происходит и без включения аудита.
Там происходит не определение, а додумывание за пользователя. Додумывание включается, когда у столбцов совпадают все атрибуты, кроме имени.
Но совершенно не учитывыается вариант, когда столбец был удален и добавлен новый. А ведь в этом случае данные в таблицах будут различаться.

И как вы собираетесь поступать, если "переименованный" столбец задействован в каких-либо констрейнтах и триггерах?

Если хотите, чтобы ваша схема хоть как-то работала -- навесьте на БД DDL-триггер, который будет сохранять все DDL-инструкции. Потом их будете применять на второй БД.
19 июн 12, 18:55    [12741115]     Ответить | Цитировать Сообщить модератору
 Re: Как определить что поле переименовано  [new]
RubinDm
Member

Откуда:
Сообщений: 461
Mikhail Tchervonenko
Существует ли возможность с большой вероятностью определить что поле таблицы было переименовано? и если да то по какому критерию это можно узнать?
Спасибо
select
  C1.object_id
, C1.column_id
, name1 = C1.name
, name2 = C2.name
from MyDabatase1.sys.columns C1
join MyDabatase2.sys.columns C2
  on C2.object_id = C1.object_id
  and C2.column_id = C1.column_id
where C2.name <> C1.name
Такой запрос покажет только те переименованные поля, которые изначально были созданы в MyDabatase1 и позже сресторены в MyDabatase2 из бекапа от MyDabatase1. Я специально перепроверил на mssql 2008r2: идентификаторы таблиц (object_id) и колонок (column_id) сохраняются при бекапе\ресторе, что позволяет использовать их в качестве ключей для сопоставлений. Надо учитывать, что если колонки не переименовывались, а менялись местами, то запрос их также покажет.

зы: это все out of warranty
19 июн 12, 19:31    [12741267]     Ответить | Цитировать Сообщить модератору
 Re: Как определить что поле переименовано  [new]
Mikhail Tchervonenko
Member

Откуда: Münster, Germany
Сообщений: 1738
RubinDm,
спасибо,
предполагается что дальше сравнение будет производиться после добавления или удаления колонок через ALTER TABLE и тогда id не будут совпадать.
20 июн 12, 10:50    [12743810]     Ответить | Цитировать Сообщить модератору
 Re: Как определить что поле переименовано  [new]
Alexandr Kr.
Member

Откуда: Украина, Харьков
Сообщений: 165
Mikhail Tchervonenko,

А почему нельзя запустить профайлер в фоне настроеный на альтер допустим таблиц. И по трассе профайлера уже анализировать?
20 июн 12, 11:14    [12744048]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить