Posts Tagged ‘PowerDesigner’

PowerDesigner удаление первичного ключа MS SQL 2005

Понедельник, июля 16, 2012

При генерации скрипта при помощи PowerDesigner для  MS SQL 2005 генерируется скрипт, который при первом запуске выдает ошибку “Сообщение 4902, уровень 16, состояние 1, строка 1 Cannot find the object “Имя таблицы” because it does not exist or you do not have permissions.”. Это вызвано тем что PowerDesigner генерирует скрипт, в котором перед созданием таблицы удаляется ее первичный ключ. (ещё…)

Share

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