Archive for Октябрь, 2010

PowerDesigner ошибка при удалении значений по умолчанию в MS SQL 2005

Четверг, октября 28, 2010

При генерации скрипта для изменения схемы данных PowerDesigner 15.2 переименовывает редактируемую таблицу во временную с префиксом tmp_, после чего выполняет ее создание, а затеем перезаливку данных из временной таблицы. Все было бы ничего, если бы эта умная программа удаляла все ограничения по умолчанию, которые привязаны к столбцам таблицы. Если этот скрипт применить к базе данных, то обязательно получите сообщение об ошибке

В базе данных уже существует объект с именем "DF_Имя_ограничения".

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

Для того что бы не писать каждый раз явно скритп для удаления ограничений таблицы, можно поступить следующим образом.

В PowerDesigner выбрать пункт DataBase – Edit Current DBMS на вкладке General выбрать Script – Objects – Table – Rename

Редактировать DBMS

Редактировать DBMS

Там будет содержаться команда

[%R%?[exec ]][execute ]sp_rename %OLDTABL%, %NEWTABL%

Замените его на следующий текс

Declare @SqlText varchar(200), @DF_Name varchar(50)

Declare  C Cursor

for Select sobjects.name

from  sysobjects sobjects

Where parent_obj = object_id('%OLDTABL%') and sobjects.xtype = 'D'

open C

fetch next from c into @DF_Name

While @@fetch_status = 0

begin

set @SqlText = 'alter table %OLDTABL% Drop constraint '+@DF_Name

print @SqlText;

exec(@SqlText)

fetch next from c into @DF_Name

end

Close C

Deallocate C

[%R%?[exec ]][execute ]sp_rename %OLDTABL%, %NEWTABL%

Здесь явно прописан скрипт удаления ограничений. Плюсом этого ново введения будет , то что это будет выполняться автоматически всякий раз как PowerDesigner будет переименовывать таблицу, минус, то что это будет сохранено локально и если вы будите работать за другими компьютером, то вам придется повторить операцию.

Share