Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как сгенерить скрипт не через EM?
|
|||
|---|---|---|---|
|
#18+
Я что-то не нашел (или не там искал?) - как в ms sql 7.0 не прибегая к помощи EM сгенерить скрипт какого-либо объекта в базе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2001, 06:49 |
|
||
|
Как сгенерить скрипт не через EM?
|
|||
|---|---|---|---|
|
#18+
Можно через SQL-DMO, а вот пользуясь только T-SQL, насколько я знаю, не получится. Можно отдельно выдернуть скрипты из системных таблиц, но записывать их в batch-файл в нужном порядке придется самому. Если кто-то знает, как обойтись только T-SQL, напишите, плз. Меня этот вопрос тоже очень интересует ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2001, 07:08 |
|
||
|
Как сгенерить скрипт не через EM?
|
|||
|---|---|---|---|
|
#18+
Для GreenSunrise Помоему всю информацию можно вытащить через системные таблицы. Например Тексты процедур, View, функции и т.д. и т.п. есть в таблице syscomments. Script по созданию таблицы можно сгенерить по информации из sysobjects, syscolumns, systypes, sysindexes. Ну и т.д. Я лично так и поступаю. Потому что чтобы использовать DMO на клиенте, то его надо сперва туда установить. А на сервере вызывать OLE объекты через хранимые процедуры, что-то боязно. Я пробовал, все работает, но я не понимаю четко механизма работы и поэтому не знаю что там происходит в случае различных ошибок. Вследствие этого боюсь замусорить память на сервере. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2001, 07:36 |
|
||
|
Как сгенерить скрипт не через EM?
|
|||
|---|---|---|---|
|
#18+
2BiSas: Это понятно, что всю информацию можно выдернуть из системных таблиц - проблем нет. Основные вопросы начинаются, когда надо сгенерить скрипт не только для самого объекта, но и для зависящих от него других объектов. К примеру, чтобы родительская таблица создавалась прежде дочерних; процедуры только после того, как все участвующие в них объекты уже созданы и т.д. Не так просто сваять полноценный скрипт для базы в целом, чтобы он отрабатывал все действия правильно. А по отдельности - это не вопрос... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2001, 11:37 |
|
||
|
Как сгенерить скрипт не через EM?
|
|||
|---|---|---|---|
|
#18+
2GreenSunrise Да, ты прав - основной геморой это связь и последовательность А можно подробнее про SQL-DMO - как с ним работать, что для этого нужно и как сгенерить скрипт... данная задача будет заведомо работать только на сервере. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2001, 11:50 |
|
||
|
Как сгенерить скрипт не через EM?
|
|||
|---|---|---|---|
|
#18+
Согласен, да это геморрой. Но если хочется, то можно сделать. Зависимости кажется можно выяснить по таблице sysdepends. А может я не прав. В этом направлении я не работал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2001, 12:24 |
|
||
|
Как сгенерить скрипт не через EM?
|
|||
|---|---|---|---|
|
#18+
Для хранимых процедур, view и тригеров скрипт генериться процедурой sp_helptext obj_name Для таблиц информацию выдает sp_help, но в сложных случаях придется лезть в системные таблицы. Что касается References, то их как и триггеры, процедуры и view надо создавать после создания таблиц. Зависимости между объектами (кроме таблиц) храниться в sysdepends. Задача не тривиальная, хотя, повидимому, сводиться к построению дерева. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2001, 12:26 |
|
||
|
Как сгенерить скрипт не через EM?
|
|||
|---|---|---|---|
|
#18+
Да я только теоретически знаю, что так можно. См. BOL: Contents->Creating and Maintaining Databases->Databases->Documenting and Scripting Databases. В конце статьи есть ссылки как сгенерить скрипт, пользуясь EM или SQL-DMO. Там точно также выставляются флажки, что вносить в скрипт (триггера, констрейнты, индексы...), и флажок "скриптовать зависимые объекты" тоже есть. sp_help выдает информацию в виде нескольких recordset'ов, а не скрипта, так что не слишком удобно, хотя ее и можно поставить на службу отечеству А насчет вытаскивания информации из системных таблиц... Там много чего тащить надо. Например, для скрипта одной единственной таблицы нужно тащить информацию из sysobjects, syscolumns, syscomments (там хранятся default'ы для колонок, тексты триггеров, вьюх, процедур), sysforeignkeys, sysconstraints, наверняка еще откуда-нибудь. Не забыть про null, identity, rowguidcol, default, автогенерируемые и вычисляемые поля и т.д. и т.п. Короче, я не говорю, что это нечто невозможное, но если подходить к этой задаче по-серьезному, то там есть где засесть на немалое время и насажать прилично ошибок. Судя по логу профайлера, у MS для этой задачи нет единой процедуры - поправьте меня, если я ошибаюсь. Они используют несколько внутренних хранимых процедур (с префиксом sp_MS), если сильно невтерпеж, можно и на их код посмотреть. Возможно, у "третьих фирм" есть некоторые инструменты. Если кто сталкивался, отзовитесь! Но боюсь, что у них это тоже ограничится мышиным интерфейсом, а не единой хранимой процедурой. Связи, скорее всего, действительно надо запихивать в древовидную структуру. Тут же вылезет проблема с рекурсивными процедурами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2001, 12:49 |
|
||
|
Как сгенерить скрипт не через EM?
|
|||
|---|---|---|---|
|
#18+
В инете где-то мне попадалась такая единая процедурка. Кажется это было на http://www.swynk.com или http://sqlserver.superexpert.com ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2001, 13:54 |
|
||
|
Как сгенерить скрипт не через EM?
|
|||
|---|---|---|---|
|
#18+
2Denniz, 2GreenSunrise Проблемы связей между объектами не существует! Порядок создания объектов примерно следующий - возможно не полный, желающие могут расширить 1) types 2) defaults 3) bind defaults to types 4) tables 5) views 6) references keys 7) triggers procedures 9) load data into tables пытаться создавать деревья по sysdepends я бы не советовал т.к. связи между таблицами там не отражаются - это делается в sysreferences: fkeyid, rkeyid соответственно id, а кроме того таблица похоже оставлена в версиях после седьмой только для совместимости и реальной картины зависимостей объектов в БД вообще не отражает. посмотреть на это очень просто - выполняем скрипт: CREATE TABLE tab1 (a int) GO CREATE PROC proc1 AS SELECT * FROM tab1 и в sysdepends попадет зависимость процедуры proc1 от таблицы tab1 а если так: CREATE PROC proc2 AS SELECT * FROM tab2 GO CREATE TABLE tab2 (a int) то в sysdepends не попадет зависимость процедуры proc2 от таблицы tab2 вот такие пироги ;( анализировать sysreferences на предмет связей между таблицами я тоже не советую, потому что это могут быть не "деревья" а "кольца" пример: CREATE TABLE a( a int not null primary key, b int null) GO CREATE TABLE b( b int not null primary key, a int null) GO ALTER TABLE a ADD CONSTRAINT FK_a_b FOREIGN KEY (b) REFERENCES b(b) GO ALTER TABLE b ADD CONSTRAINT FK_b_a FOREIGN KEY (a) REFERENCES a(a) GO select * from sysreferences where fkeyid in (select id from sysobjects where name in ('a', 'b')) и все равно придется создавать ссылки между таблицами отдельно от самих таблиц хотя задача анализа "деревьев" сама по себе очень интересна, и только ради либви к искусству стоит ею хотябы раз в жизни позаниматься )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2001, 14:44 |
|
||
|
Как сгенерить скрипт не через EM?
|
|||
|---|---|---|---|
|
#18+
2Denis пункт load data into tables надо делать до references keys, а то придется разбираться с "кольцами" ) Кроме того, что же делать с View? Попробуй выполнить команду create view qq1 as select * from qq2 если view qq2 не создана Удачи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2001, 14:54 |
|
||
|
Как сгенерить скрипт не через EM?
|
|||
|---|---|---|---|
|
#18+
2Denis: Твой порядок не жизнеспособен. Вот пример: create table t1( col1 as func1(getdate()) ) create trigger tr1 on t1 for ... as begin insert into t2 exec proc1 end и т.д. В одних случаях надо создавать таблицы, потом функции, потом процедуры. В другом сначала пару функций, потом часть таблиц, потом часть процедур, потом снова таблицы... Вообще говоря, соблюдение порядка принципиально важно только при создании внешних ключей - если перепутать, то получишь ошибку и нужный объект не создастся. Неправильный порядок создания таблиц, процедур и функций приведет только к warning'у "нельзя добавить в sysdepends", но все объекты тем не менее создадутся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2001, 15:10 |
|
||
|
Как сгенерить скрипт не через EM?
|
|||
|---|---|---|---|
|
#18+
2All: Хм... Вот уж не думал, что мой вопрос вызовет такое бурное обсуждение 2GreenSunrise: Спасибо за наводку в BOL - будем посмотреть... Для чего мне было все это нужно? Да потому, что встроенные средства разработки в 7.0 жутко неудобные. Если забыл, где и в какой проце использовал какую-либо константу или выражение - хрен сделаешь поиск... Можно, конечно, извратиться с sp_help... но имхо еще гиморней. Вот для этого и приходится создавать скрипт, делать поиск в фаре, что-то менять, редактировать, а потом обратно. Опять же для быстрой и легкой возможности переноса структуры базы на тестовый сервер полезно. Замаялся я генерить скрипт руками в EM - вот и решил поинтересоваться о способах автоматизации... Так вот... может я чего-то не вижу, что лежит на поверхности? Может есть продукты третьих фирм предназначенные для разработки в 7.0? ps: а есть ли продукты, позволяющие проскриптовать _содержимое_ базы? то есть в скрипте получить набор insert'ов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2001, 04:06 |
|
||
|
Как сгенерить скрипт не через EM?
|
|||
|---|---|---|---|
|
#18+
А ErWin не пробовали? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2001, 05:15 |
|
||
|
Как сгенерить скрипт не через EM?
|
|||
|---|---|---|---|
|
#18+
2Pandre посыпаю голову пеплом, действительно данные надо лить до ссылок и с представлениями ты меня уел действительно их надо заливать в строго определенном порядке... но это очень грустно т.к. как я уже говорил sysdepends верить нельзя: create view view1 as select 1 as num GO create view view2 as select * from view1 GO drop view view1 GO create view view1 as select 'text' as text в sysdepends записи нет таким образом остается только идти по syscomments, а это тоже не всегда возможно только если коды не криптованы т.о. с view задача в общем виде не решается must die!!! 2GreenSunrise Извини, но ты не прав речь шла изначально про 7-ку поэтому функции не рассматривались, а создавать их надо просто до всех таблиц... проблем с созданием типов объектов вперемешку (одна таблица, одна процедура, две функции, другая таблица) нет, как ты сам заметил '...приведет только к warning'у "нельзя добавить в sysdepends",...' но вот как раз c функциями в качестве полей таблиц так не прокатит ;( а вот со связями между view как замечено Pandre действительно проблема... особенно если это view на linked сервера ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2001, 06:51 |
|
||
|
Как сгенерить скрипт не через EM?
|
|||
|---|---|---|---|
|
#18+
С созданием view скриптом типа if exists.. drop view ... create view ... go if exists.. drop view ... create view ... go if exists.. drop view ... create view ... go можно поступать следующим образом - прогнать скрипт несколько раз, пусть ошибки вылетают они не кому не мешают ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2001, 07:18 |
|
||
|
Как сгенерить скрипт не через EM?
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2001, 07:19 |
|
||
|
Как сгенерить скрипт не через EM?
|
|||
|---|---|---|---|
|
#18+
2Denniz: в том или ином виде с этой проблемой сталкивались, наверное, почти все, поэтому такой бурный отклик Насчет вопроса про процедурку, которая по содержимому таблицы сделает набор insert'ов - у меня есть такая (тоже как-то возникала надобность, пришлось написать), если хочешь, черкни на мыло -GreenSunrise@mail.ru-, я тебе скину. 2Denis: я думаю, что подобную проблему стоит рассматривать более широко, чем с привязкой к конкретной версии сиквела, так что вопрос "что делать с функциями" вполне актуален. И насчет создания функций до таблиц - тоже неловко выходит. Функции могут использовать данные из других таблиц. Создание объектов в неправильном порядке приведет опять-таки к отсутствию записей в sysdepends, если только это действует на функции. 2All: если вываливается предупреждение "нельзя добавить в sysdepends", это не страшно в случае создания объектов БЕЗ указания опции WITH SCHEMABINDING. А вот если ее указывать, то НЕЛЬЗЯ будет создать объекты БД в неправильном порядке. Напоследок - просветите меня, почему данные надо заливать до создания references keys? Я что-то не догоняю... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2001, 07:36 |
|
||
|
Как сгенерить скрипт не через EM?
|
|||
|---|---|---|---|
|
#18+
2GreenSunrise Данные надо заливать до создания references keys, чтобы не учитывать references keys в последовательности заливки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2001, 07:44 |
|
||
|
Как сгенерить скрипт не через EM?
|
|||
|---|---|---|---|
|
#18+
2Pandre Идея про прогон скриптов несколько раз мне понравилась У меня в это время тоже решение вызрело - в конце концов заливку объектов можно (и нужно в нашем случае) делать через exec и анализировать результат, если обломилось, повторить позже (только не весь скрипт, а только ту часть что обломилать) и так до полной победы 2GreenSunrise Если честно я уже не закладываюсь на sysdepends в силу описанных мною ранее причин: в процессе экслуатации системы кто-нибудь "очень умный" может дробнуть и вновь создать любой объект и прощай sysdepends а с такими "умными" нам постоянно приходится сталкиваться, поэтому я не ситаю что при заливке данных следует содержать sysdepends в порядке. С другой стороны я не претендую на всезнание Про хинт SCHEMABINDING услышал от тебя первый раз - это может сильно поколебать мою позицию по данному вопросу ;( мой books on-line сказал что оно появилось только в 2000 - а я все больше пока 7-й занимаюсь ;( про заливку данных все просто, если ты ее делаешь после построения foreign keys то выполнять ее надо в строго даданной последовательности - сначала родитель потом дети - а в общем случае это не возможно (см. мой пример выше про циклические завязки между таблицами) хотя конечно никто не мешает тебе создавать все ссылки, потом отключать их у всех объектов, заливать все данные, потом опять их включать (лично я так и делал иногда) но при этом, если не ошибаюсь, при включении их обратно проверки целостности БД сервер не производит ;( надо самому об этом позаботиться ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2001, 08:10 |
|
||
|
Как сгенерить скрипт не через EM?
|
|||
|---|---|---|---|
|
#18+
2VictorS: Насчет ErWin - много слышал, но все как-то руки не доходят попробовать... можно краткую аннотацию (url)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2001, 11:01 |
|
||
|
Как сгенерить скрипт не через EM?
|
|||
|---|---|---|---|
|
#18+
Поддерживаю VictorS, ну в самом деле ну нафига изобретать велосипед? 2 Denniz Посмотрите на www.interface.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2001, 12:54 |
|
||
|
Как сгенерить скрипт не через EM?
|
|||
|---|---|---|---|
|
#18+
Что касается последовательности - взгляните на sp_MSdependencies. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2001, 18:34 |
|
||
|
Как сгенерить скрипт не через EM?
|
|||
|---|---|---|---|
|
#18+
Вопрос для Гуру! Можно ли считать объективной информацию из таблицы sysdepends? Как видно из текста системных процедур sp_MSdependencies и sp_depends эта таблица там активно используется, но при этом "неправильный" порядок создания связанных объектов в БД не создает записей в таблице sysdepends (см. мои примеры выше в этом топике). Есть ли другой спрособ, кроме использования sysdepends выяснить иерархию объектов в БД? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2001, 10:53 |
|
||
|
|

start [/forum/topic.php?fid=46&fpage=3550&tid=1825745]: |
0ms |
get settings: |
6ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
38ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 239ms |
| total: | 370ms |

| 0 / 0 |
