Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Генерация процедур
|
|||
|---|---|---|---|
|
#18+
Надо сгенерить в новой базе все хранимые процедуры, которые присутствуют в исходной базе, беря описания их, естественно, из исходной (из syscomments). Кто может помочь? Очень надо!!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2001, 09:11 |
|
||
|
Генерация процедур
|
|||
|---|---|---|---|
|
#18+
А сгенерить скрипты через ЕМ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2001, 11:41 |
|
||
|
Генерация процедур
|
|||
|---|---|---|---|
|
#18+
Надо все делать из процедуры, не через EM. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2001, 12:37 |
|
||
|
Генерация процедур
|
|||
|---|---|---|---|
|
#18+
-- текст процедурки create procedure gen_proc @id int as declare @text nvarchar(4000) select @text = text from SourceDB..syscomments where id = @id exec (@text) -- конец процедурки можно с помощью фетча пройтись по всем записям в sysobjects (описание формата таблицы есть в Books Online), и, последовательно выбирая оттуда id объектов, являющихся процедурами, выполнять для них описанный выше код. выполняться это должно в той базе, где нужно создать процедуры из исходной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2001, 13:15 |
|
||
|
Генерация процедур
|
|||
|---|---|---|---|
|
#18+
А если процедура использует врменные таблицы,т.е. перед вызовом хранимой процедыры создаётся временная таблица, хатем в неё заносятся некие данные, вызывается процедура и что делает с этими данными. т.е. если ты достанешь код этой процедуры и выполнишь его то он не выполниться т.к. не будет временной таблицы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2001, 13:21 |
|
||
|
Генерация процедур
|
|||
|---|---|---|---|
|
#18+
засомневался я, сделал тестовые прогоны в двух базах - всё работает. иначе (по логике вещей) как же писать хранимую процедуру, не имея временной таблички? или я неправильно понял последний вопрос? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2001, 13:30 |
|
||
|
Генерация процедур
|
|||
|---|---|---|---|
|
#18+
Через exec(...) работает, если процедура не выходит за пределы nvarchar(4000), а что делать, если она большая и занимает несколько записей в syscomments? Кроме того, текущей является исходная база и как сделать перед генерацией процедуры use выходной базы, в одном exec'е не получается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2001, 14:32 |
|
||
|
Генерация процедур
|
|||
|---|---|---|---|
|
#18+
на вторую часть вопроса - если больше 4000, то сделать слияние этих строк в одну при передаче параметров для exec(...) - у самого таких ситуаций не было, ответ взял их хэлпа по exec(). а организовать вызов gen_proc можно так: создать её в TargetDB (можно даже в скрипте для импорта процедурок), последовательно обрабатывать записи из sysobjects в текущей базе, а процедурку вызывать TargetDB..gen_proc, и естественно, перед вызовом gen_proc учесть в логике возможность нескольких записей в syscomments. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2001, 14:46 |
|
||
|
Генерация процедур
|
|||
|---|---|---|---|
|
#18+
Как можно слить несколько nvarchar(4000) в одну строку, если в итоге они могут превысить varchar(8000). Имя выходной базы - параметр процедуры, значит use ее надо делать динамическим, и этот use уже недоступен для exec'а, создающего процедуру. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2001, 15:17 |
|
||
|
Генерация процедур
|
|||
|---|---|---|---|
|
#18+
альтернативный вариант - использовать isql, правда, не знаю как быть с Encrypted. в процедурке с двумя параметрами - @SourceDB и @TargetDB (можно туда же добавить для независимости ещё и сервера - @SourceServer и @TargetServer) пишем: -- импорт строк из базы-источника в out.sql select @cmd = 'isqlw -S' + @SourceServer + '-d' + @SorceDB + ' -E -iin.sql -oout.sql' exec masterdb..xp_cmdshell @cmd -- экспорт строк из out.sql в базу-назначение select @cmd = 'isqlw -S' + @TargetServer + '-d' + @TargetDB + ' -E -iout.sql -oreport.txt' exec masterdb..xp_cmdshell @cmd в in.sql пишем: select syscomments.text from syscomments inner join sysobjects on syscomments.id = sysobjects.id where sysobjects.type = 'P' and syscomments.encrypted = 0 order by syscomments.id, syscomments.colid в результате этого селекта выбираются незашифрованные строки всех процедур, получаем скрипт для всех процедур. Узкие места: 1. isqlw а не isql - в связи с тем, что при использовании isql не будет трансляции символов родного языка. 2. Вывод заголовков и возврат строк больше чем по умолчанию для isqlw (256 символов) корректируется в Tools - Options Query Analyser'а. Как это сделать параметрами командной строки не в курсе, -w регулирует только output-format. 3. Как убрать строчку внизу, после выполнения запроса (к примеру (198 row(s) affected)), я к сожалению не знаю (вроде как-то делал). Может кто на форуме подскажет. 4. Ну и опять же остается поднятым вопрос с Encrypted - что же делать с ними? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2001, 09:59 |
|
||
|
Генерация процедур
|
|||
|---|---|---|---|
|
#18+
Я что-то непонял, зачем это вообще нужно ? Новая база с теми же процедурами что и текущая... Если уэ очень надо, можно просто сделать детачь базы, копирнуть файл, приаттачить под другим именем базы ? Если данные ненужны то транкануть таблы все... Все это можно сделать в одном скрипте...Криптованные процедуры никак сгенерить неполучиться, только предварительно разкриптовать, но это надо уже делать с помощью декриптовщика... И потом, если данные в syscoment были удалены, для предотвращения декритпования, то только деттачь-копирование файлов- аттачь может помочь в этой ситуации... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2001, 16:32 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32017479&tid=1824907]: |
0ms |
get settings: |
10ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
78ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
2ms |
| others: | 250ms |
| total: | 446ms |

| 0 / 0 |
