Практическая задача- изменился тип или размерность некоторого поля

добавлено: 14 сен 15
понравилось:0
просмотров: 964
комментов: 0

теги:

Автор: Дмитрий Горчилин

..а оно есть в нескольких таблицах. Таблиц много, куча связанных с ними журналов, за всеми так сразу не уследишь. Есть ли выход? Есть- при грамотном и разумном проектировании названия полей не повторяются. В любой момент можно узнать в каком реп деф у нас это поле подписано, сходу нарисовать альтер под него. Безусловно, не применять бездумно, а сначала оценить последствия и целесообразность.


--Д. Горчилин. Указывает репликационные дефинишены в которых есть данная колонка

---- простая версия:

declare @colnam varchar(30)
select @colnam='<<название поля>>'

select 'alter replication definition '+char(34)+objname+char(34)+' alter columns with '+char(34)+@colnam+char(34)+
' /*'+dsname+'.'+dbname+' --- '+rs_sites.name+' */' from rs_columns,rs_databases,rs_objects,rs_sites
where
rs_columns.objid=rs_objects.objid and
rs_databases.dbid=rs_objects.dbid and
rs_databases.prsid=rs_sites.id and
colname=@colnam

---------- сложная версия, указывает еще и существующий на данный момент тип

declare @colnam varchar(30)
select @colnam='<<название поля>>'

select 'alter replication definition '+char(34)+objname+char(34)+' alter columns with '+char(34)+@colnam+char(34)+
' /*'+rs_sites.name+' --->'+dsname+'.'+dbname+' '+
case when coltype=0 then 'char'
when coltype=1 then 'binary'
when coltype=4 then 'text'
when coltype=5 then 'image'
when coltype=6 then 'tinyint'
when coltype=7 then 'smallint'
when coltype=8 then 'int'
when coltype=9 then 'real'
when coltype=10 then 'float'
when coltype=11 then 'bit'
when coltype=12 then 'datetime'
when coltype=13 then 'smalldatetime'
when coltype=14 then 'money'
when coltype=15 then 'smallmoney'
when coltype=16 then 'numeric'
when coltype=17 then 'decimal'
when coltype=18 then 'varchar'
when coltype=19 then 'varbinary'
else '*' end +
case when coltype in(0,4,18) then '('+rtrim(convert(char(5),length))+')'
else ' ' end
+' */' from rs_columns,rs_databases,rs_objects,rs_sites
where
rs_columns.objid=rs_objects.objid and
rs_databases.dbid=rs_objects.dbid and
rs_databases.prsid=rs_sites.id and
colname=@colnam
order by rs_sites.name,dsname,dbname,objname


Рекомендации как всегда- сначала думать, потом делать. Иногда удачный альтер на лету валит систему, соблюдать осторожность. Второй момент, в новых версиях новые типы данных, увидали звездочку- творчески доработали :)

Комментарии




Необходимо войти на сайт, чтобы оставлять комментарии