Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.09.12;
Скачать: [xml.tar.bz2];

Вниз

Формирование SQL-скрипта на создание таблицы из программы   Найти похожие ветки 

 
Ольга   (2004-08-15 17:38) [0]

Мне нужно из программы сгенерировать полный скрипт на создание таблицы. Для простых таблиц все ОК, а для более сложных (с кучей CONSTRAINT-ов) что-то я запарилась выгребать и связывать информацию из системных таблиц.

А ведь есть какая-нибудь системная хранимая процедура, которая эта делает для Enterprize Manager!? Помогите ее найти! А то я, по-моему, велосипед изобретаю...


 
Ольга   (2004-08-15 17:43) [1]

Небольшое уточнение - таблица уже есть, нужно срисовать с нее скрипт.


 
Desdechado ©   (2004-08-15 18:09) [2]

принято указывать СУБД, а то ведь для разных способы разнятся


 
Ольга   (2004-08-15 18:13) [3]

Sorry...
СУБД - MS SQL 2000, программа на Delphi 6


 
сергей1   (2004-08-15 19:21) [4]

вообще-то это должно делаться через SQL-DMO. Эта такая библиотека, которая позволяет делать многие вещи клиентским приложениям. Для VBA, например, это особых сложностей не вызывает, там эта библиотека подключается легко (SQLDMO Object Library), а затем сразу можно обьявлять переменные

Dim b As SQLDMO.Table

у данного типа есть метод script, который и выводит sql-script существующей таблицы.
Вот отрывок из хелпа

Script Method
The Script method generates a Transact-SQL command batch that can be used to re-create the Microsoft® SQL Server™ 2000 component referenced by the SQL-DMO object.

Syntax
object.Script( [ ScriptType ] [, ScriptFilePath ] [, Script2Type ] ) as String

Parts
object

Expression that evaluates to an object in the Applies To list.

ScriptType

Optional. A long integer that overrides default scripting behavior as described in Settings.

ScriptFilePath

Optional. A string that specifies an operating system file as an additional target for the generated Transact-SQL script.

Script2Type

Optional. A long integer that overrides default scripting behavior as described in Settings

Returns
A Transact-SQL command batch as a string.

Remarks
The Script method generates a Transact-SQL command batch that defines an existing SQL Server component. Some SQL-DMO objects, such as the Index object, support command batch generation for SQL-DMO objects that defines new components through the GenerateSQL method.

Use the GenerateSQL method when capturing object definition. Use the Script method when capturing an image of an exiting component. When using the Script method as part of an application process re-creating a component, specify SQLDMOScript_Drops in the ScriptType argument to include a drop of the existing component in the command batch.

Для дельфи наверно сложнее, но не думаю что намного, надо порыться в хелпе, может что и будет


 
AndB ©   (2004-08-15 19:46) [5]

http://sql.softmatics.ru/22.htm


 
AndB ©   (2004-08-15 19:55) [6]

ну я как обычно.. пример по ссылке просто дампит таблицу. без структуры. но тоже интересно.


 
AndB ©   (2004-08-15 20:21) [7]

стандартных средств в t-sql нет. даже здесь http://support.microsoft.com/default.aspx?scid=kb;en-us;233392 пример на VB. можно так (не мое)
declare @oSrv int, @oDB int, @oTable int, @cScript varchar(8000)
exec sp_OACreate "SQLDMO.SQLServer", @oSrv output
exec sp_OAMethod @oSrv, "Connect", NULL, "server", "login", "password"
exec sp_OAGetProperty @oSrv, "Databases", @oDB output, "имя_БД"
exec sp_OAGetProperty @oDB, "Tables", @oTable output, "имя_таблицы"
exec sp_OAMethod @oTable, "Script", @cScript output
exec sp_OAMethod @oSrv, "Disconnect"
exec sp_OADestroy @oSrv
select @cScript

если структура поместится в 8000 сиволов. или scptxfr.exe (вообще Google рулит)


 
сергей1   (2004-08-15 21:12) [8]

http://www.sql.ru/forum/actualthread.aspx?bid=20&tid=6850


 
AndB ©   (2004-08-16 06:24) [9]

[8] - ну и? На sql.ru, правда, ответов много. Только варианты с использованием SQL-DMO прокатывают (имхо, насколько понял из текстов) на сервере или машине с установленным ЕМ. Но в таком разе через интерфейс ЕМ проще. А на чистом клиенте CreateOleObject("SQLDMO.SqlServer"); - что даст? Тогда как пример из [7] можно с клиента запустить.


 
сергей1   (2004-08-16 08:09) [10]

во-первых я не с кем не спорю и не говорю, что подключение DMO библиотеки - the only and the best. Во вторых, насколько я понял, вовсе не обязательно иметь EM или ставить на сервер, там в библиотеке есть класс TSQLServer, у которого настривается строка подключения, да и не логично делать библиотеку для клиента, с требованием сервак инсталлировать на ту-же машину


 
сергей1   (2004-08-16 09:27) [11]

The Connect method attempts to establish a connection with a named instance of Microsoft® SQL Server™ 2000.

Syntax
object.Connect( [ ServerName ] , [ Login ] , [ Password ] )

Remarks
When the ServerName argument is not specified, the SQL-DMO application attempts to connect to an instance of SQL Server using the network name of the computer on which the application is running. If that computer is also running an instance of SQL Server, a connection is established to that instance of SQL Server.


 
AndB ©   (2004-08-16 10:25) [12]

да я будто спорю ;))
Сперва подумал, что можно таскать sqldmo.dll, а потом (попутно) открыл для себя SQL2000Print (http://www.starprint2000.com/) - эти ребятишки вопрос как-то решили "на ровном месте". Создания скриптов я, правда, сходу не заметил, но как документатор базы - оччень ничего. Причем любые потроха описывает, и если не создает скриптов - то только от лености. :)


 
strelok-47   (2004-08-16 10:26) [13]

2 Ольга  
сам этим же заниался месяца два назад, усохнешь, если CONSTRAINT до ..., много одним словом. Вывод нашел такой: т.к. мне надо продублировать структуру таблицы и заполнить ее данными, но не всеми а только частью из основной БД, то создаешь таблицы  без CONSTRAINT"ов, заливаешь данные, создаешь без проверки CONSTRAINT"ы. К сожалению программно не успел реализовать :(, перебросили на другой проект, этот отложен временно, но в теории должно сработать :) Попробуй.


 
Ega23 ©   (2004-08-16 10:27) [14]


select * from sysobjects
select * from syscolumns
select * from sysindexes


фомула успеха...


 
сергей1   (2004-08-16 10:39) [15]

2 AndB

да, штука вроде неплохая, правда в клиента ее явно не встроить


 
Ольга   (2004-08-16 17:26) [16]

Всем огромное спасибо, нашла кучу полезной информации: и по скриптам, и по заполнению базы, и по документированию... Класс! Еще бы все это осилить...
Видимо будет не велосипед, а космический корабль!


 
Sergey13 ©   (2004-08-16 18:06) [17]

2[16] Ольга   (16.08.04 17:26)
>Видимо будет не велосипед, а космический корабль!
Трех колесный. 8-) Никогда не понимал людей зашивающих в программу DDL. ИМХО, это надо только для ну очень специализированного софта. Но это так, треп. 8-)


 
Ольга   (2004-08-16 19:31) [18]

А я в программу ничего и не зашиваю - весь этот "огород" будет на сервере, из программы только вызов.
Нет, жизнь она, конечно, поправит... Но пока - полная эйфория!
РАБОТАЕТ!!!



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2004.09.12;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.032 c
1-1093617452
Apachi
2004-08-27 18:37
2004.09.12
Lingvo


1-1093807149
mefisto
2004-08-29 23:19
2004.09.12
КОРОЧЕ РЕБЯТА я тот автор вопроса про кнопку ПУСК :)


3-1092386137
Вика
2004-08-13 12:35
2004.09.12
Проблема с текстовым полем...


6-1089278123
Iraizor
2004-07-08 13:15
2004.09.12
Вопрос про Сокеты и размер блока


1-1093589612
dim-
2004-08-27 10:53
2004.09.12
Почему повторный вызов dll вызывает ошибку?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский