Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Скрипт объекта БД посредством SQLDMO.SQLServer [MSSQL]


Страницы:   1 2

Ольга ©   (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-полем?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо