mssql scripting order

7 отговора 469 прегледа
#1

mssql scripting order

Здравейте, налага ми се да ползвам mssql и когато генерирам sql script от enterprise manager (примерно на 10 нови обекта, които ползват един друг) мога ли да им задам в какъв ред да ги скриптва? Щото то ги скриптва в произволен ред, и после този скрипт не работи, тъй като опитва да създаде обект, който зависи от още несъздаден такъв.

-------------
Special killer double trouble triple extra nicotine monster!
Отговор
в отговор на z_free #2

Re: mssql scripting order

Не може - трябва сам да си ги подредиш

--
Miroslav Penchev
[линк]
Отговор
в отговор на z_free #3

Re: mssql scripting order

Едно стандартно решение на проблема е да генерираш 2 скрипта: за първия казваш на ЕМ да генерира само КРЕАТЕ ТАБЛЕ статемент-и (без ФК, ...), на втория казваш да генерира всичко останало. Изпълняваш ги един след друг и всичко ще е ок...

Епа, това е моето хоби... [линк]
Отговор
в отговор на fiffy #4

Re: mssql scripting order

Идеята не работи за VIEW-тата, защото може да има зависимости между самите view-та - а те няма как да се подредят, защото се генерират наведнъж.

--
Miroslav Penchev
[линк]
Отговор
в отговор на Miro #5

Re: mssql scripting order

като "Genrate SQL script" прозореца и там има един таб "Formatting" И тан чекни "Generate script for all dependent objects" . Обърни внимание и на таба "Options" в смисъл. че и там можеш да указваш дали да се включат FK и PK.

Отговор
в отговор на Maлa #6

Re: mssql scripting order

Но тези опции не ти подреждат VIEW-тата в необходимия за правилното създаване ред. Ако VIEW1 използва VIEW2 то напълно е възможно в генерирания скрипт първо да се създава VIEW1 и чак след него VIEW2. При което такъв скрипт ще гръмне и няма да може да създаде VIEW-тата.

--
Miroslav Penchev
[линк]
Отговор
в отговор на z_free #7

Re: mssql scripting order

Не е много произволен, по азбучен ред ги нарежда. По принцип за последния пач пише че го оправя но е работи читаво само за малко на брой обекти.
Аз като create-вам база от скрипт така, го пускам 5-6 пъти. В result pane-а търся 'ivalid', ако го няма значи сичко е ОК, ако го има .... четеш грешката.

Отговор
в отговор на AzSumZmei #8

Re: mssql scripting order

Пък да ви кажа аз как си решавам проблема :

Всеки един обект (таблица, view, функция и т.н.) от базата си има собствен скрипт файл. Ако трябва нещо да се променя по обекта - променя се неговия скрипт файл и се стартира към базата, за да се отрази промяната.

Когато трябва да се направи чисто нова база използвам следния трик: Прави се include.sql в който има само директиви #include <име на файл.sql> за всеки един обект, които са подредени според техните взаимни връзки. Когато ми трябва пълен скрипт на базата - пускам този include.sql (всъщност са над 20-тина такива файлове с #include-и) през един мой parser (нищо сложно, даже може да се ползва препроцесора на MSVC) и получавам изходен файл, в който са include-нати всички скриптове в подходящия ред.

--
Miroslav Penchev
[линк]
Отговор