![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Скрипт объекта БД посредством SQLDMO.SQLServer [MSSQL]
Ольга © (2006-05-04 17:41:00)Скрипты на создание объектов БД получаю с помощью хранимой процедуры, которая вызывает методы SQLDMO.SQLServer. Все было здорово до тех пор, пока не встретился скрипт размером > 8000 (переменная, в которую пишется скрипт @cScript varchar(8000)) Пыталась подставить другой тип - не работает. Может что подскажете, мастера?
DECLARE @oSrv int, @oDB int, @oObj int, @cScript varchar(8000),
@Server varchar(50),@DataBase varchar(50),@TypeObject varchar(30),@NameObject varchar(50)
SET @Server = 'local'
SET @DataBase = 'ETALON'
SET @TypeObject = 'StoredProcedures'
SET @NameObject = 'DeleteFromShema'
EXEC sp_OACreate 'SQLDMO.SQLServer', @oSrv output
EXEC sp_OASetProperty @oSrv, 'LoginSecure', 'TRUE'
EXEC sp_OAMethod @oSrv, 'Connect', NULL, @Server
EXEC sp_OAGetProperty @oSrv, 'Databases', @oDB output, @DataBase
EXEC sp_OAGetProperty @oDB, @TypeObject, @oObj output, @NameObject
EXEC sp_OAMethod @oObj, 'Script', @cScript output
EXEC sp_OAMethod @oSrv, 'Disconnect'
EXEC sp_OADestroy @oSrv
SELECT @cScript
Хозяин (2006-05-05 07:34:00) [21][5] + только Ваш скрипт работает через метод "Script", а у него через "SQLDMO.Transfer".
И вот он пишет почему:
"Для использования sp**** необходимо передать ей имя объекта, сценарий которого хотите создать.
...
Если вам приходилось программировать на DMO, возможно, вы удивились тому, что я использовал объект Transfer, а не вызов метода Scriptдля каждого объекта. Причина по которой я так поступил, проста: наличие зависимостей между объектами. Объект Transferзаписывает схему объектов в сценарий в порядке их зависимостей. и т.д."
Хозяин (2006-05-05 07:25:00) [22]Когда DECLARE @cScript text ошибка:
The text, ntext, and image data types are invalid for local variables.
Попробуйте мне когдато помогло, т.с. выкрутился :)
CREATE PROC myProc
@cScript ntext=NULL
AS
[7] - это самопальная процедура автора книги.
Секунду...сейчас напечатаю выдержку с книги...
Ольга (2006-05-05 07:17:00) [23]Хозяин [5]
Что за процедура sp_generate_script? В Help-е не нашла.
Ольга (2006-05-05 07:13:00) [24]Nikolay M. ©
Не хочу формировать скрипт врукопашную - громоздко и по-кустарному. По-моему, лучше, если это делает сам сервер с учетом конкретных особенностей данной БД.
sniknik ©
Когда DECLARE @cScript varchar(8000) ошибка:
ODSOLE Extended Procedure, sp_OAMethod usage:
ObjPointer int IN, MethodName varchar IN [, @returnval <any> OUT [, additional IN, OUT, or BOTH params]]
Когда DECLARE @cScript text ошибка:
The text, ntext, and image data types are invalid for local variables.
Хозяин (2006-05-05 06:53:00) [25]А вообще могу предложить универсальную процедуру "sp_generate_script" из книги Кен Хендерсон "Профессиональное руководство по SQL Server: хранимые процедуры, XML, HTML". Тоже на DMO.
Хозяин (2006-05-05 06:48:00) [26]но с локальной переменной так это непройдет.
Хозяин (2006-05-05 06:47:00) [27]Пыталась подставить другой тип - не работает.
Можно было бы объявить @cScript как ntext, но с локальной переменной так это пройдет.
Но можно сделать такое объявление в параметре этой хранимой процедуры, вот так:
CREATE myProc
@cScript ntext=NULL
AS
Ну это как вариант...
sniknik (2006-05-04 21:16:00) [28]> varchar(8000)
это максимально возможного размера строка... больше только blob/text
как именно не работает? (ошибка?)
Nikolay M. (2006-05-04 18:23:00) [29]
> Скрипты на создание объектов БД получаю с помощью хранимой
> процедуры, которая вызывает методы SQLDMO.SQLServer.
Почему бы не написать простенький СОМ-объект, который будет делать все тоже самое, а скрипт класть в файл или в таблицу с NTEXT-полем?