Kak polu4it CREATE TABLE iz SYSTEMI

Salik
Дата: 13.12.2002 18:29:50
S pomoshyu sleduyushego zaprosa ya mogu polu4it tekst SP i obrabotat ego :

select
replace(routine_definition, 'create procedure', 'alter procedure') + 'go' + char(10)
from information_schema.routines
where specific_name like 'spCONTENT%'



Vopros a mogu li ya kak nibud polu4it tekst sozdaniya tablizi po cushestvuyushey tablize ????
mne eto nujno dlya dobavleniya novoy tablizi v "PARTITION VIEW"
Salik
Дата: 14.12.2002 20:55:21
???
Julius
Дата: 15.12.2002 08:40:02
Скорее всего придется генерировать DDL самостоятельно, на основании данных о таблицах, колонках, индексах и ограничениях
Salik
Дата: 15.12.2002 10:47:21
Neujeli net drugogo sposoba ?
Glory
Дата: 16.12.2002 10:07:21
Другой способ ? - Пожалуйста.

В SQL-DMO у многих объектов имеется метод Script. который "generates a Transact-SQL command batch that can be used to re-create the Microsoft® SQL Server™ component referenced by the SQL-DMO object."

Конретно для вашей задачи(dobavleniya novoy tablizi v "PARTITION VIEW") можно создать DTS Package из двух шагов
- ActiveX Script, который через SQL-DMO сгенерирует DDL скрипт
- Execute SQL Task, который данный скрипт выполнит
Salik
Дата: 16.12.2002 11:05:12
Glory ,mne kajetsya vash variant o4en horoshim.

Tolko moya problema ya ne o4en znayu VB Script i SQL-DMO ,ne mogli bi vi viru4it: Nebolshim primer4ikom kak sdelat eti dba stepa v DTS ?


- ActiveX Script, который через SQL-DMO сгенерирует DDL скрипт
- Execute SQL Task, который данный скрипт выполнит



Zaranee blagodaren .
NX
Дата: 16.12.2002 12:03:49
CREATE PROCEDURE sp_ScriptProcedures @Database SYSNAME, @Path VARCHAR(500)
AS
/* сохранение процедур
@Database - имя базы
@Path - куда класть скрипты
*/
DECLARE
@SQL INT, -- SQL сервер
@SP INT, -- хранимые процедуры
@i INT, @j INT, @s VARCHAR(200), @k INT, @l SYSNAME,
@ERROR INT, -- код ошибки
@Source VARCHAR, @Description VARCHAR -- описание ошибки

EXEC @ERROR = sp_OACreate 'SQLDMO.SQLServer', @SQL OUT
IF @ERROR<>0
BEGIN
EXEC sp_OAGetErrorInfo @SQL, @Source OUT, @Description OUT
PRINT ISNULL(@Source,'')+', '+ ISNULL(@Description,'')
END
-- использовать Windows authentication
EXEC sp_OASetProperty @SQL, 'LoginSecure ', 'TRUE'
EXEC sp_OAMethod @SQL, 'Connect(".")'
-- получить в @SP коллекцию процедур
SET @s='Databases("'+@Database+'").StoredProcedures'
EXEC sp_OAGetProperty @SQL, @s, @SP OUT
SET @s='Databases("'+@Database+'").StoredProcedures.Count'
EXEC sp_OAGetProperty @SQL, @s, @j OUT
SET @i=1
WHILE @i<=@j
BEGIN
SET @s='Item(' +LTRIM(STR(@i))+ ').Name'
EXEC sp_OAGetProperty @SP, @s, @l OUT -- имя процедуры
SET @s='Item(' +LTRIM(STR(@i))+ ').Script(266343,"'+@Path+@l+'.sql",2)'
EXEC sp_OAMethod @SP, @s, @k OUT
SET @i=@i+1

END
EXEC sp_OADestroy @SQL
IF @ERROR<>0
BEGIN
EXEC sp_OAGetErrorInfo @SQL, @Source OUT, @Description OUT
PRINT ISNULL(@Source,'')+', '+ ISNULL(@Description,'')
END
Glory
Дата: 16.12.2002 12:42:26
ActiveX Script, который через SQL-DMO сгенерирует DDL скрипт что-то вроде такого

Set oSQLDMO = Createobject("SQLDMO.SQLServer")

If Not IsNull(oSQLDMO) Then
oSQLDMO.LoginSecure = True
If IsEmpty(oSQLDMO.Connect("MYSERVER")) Then
If Not IsEmpty(oSQLDMO.Databases("pubs").Tables("authors").Script(4, "c:\xx.txt", "mytable3")) Then
End if
oSQLDMO.Disconnect()
oSQLDMO.Close()
End if
End if
Set oSQLDMO = Nothing


Далее с помощью Dynamic Properties Task "загружаем" полученный скрипт в Execute SQL Task.

PS
- Полное описание первого аргумента метода Script есть в BOL.
- Можно использовать метод, предложенный NX-ом, но он все же несколько более трудоемкий.
Salik
Дата: 16.12.2002 13:02:38
Spasibo poprobuyu oba methoda

Vopros k NX:
-- использовать Windows authentication
EXEC sp_OASetProperty @SQL, 'LoginSecure ', 'TRUE'
EXEC sp_OAMethod @SQL, 'Connect(".")'


A kak bit esli ispolzuetsya SQL authentication ??

Vopros k Glory:
Nado li v vashem scripte 4to to izmenit esli ispolzuetsya SQL authentication ?

Eshe raz vsem spasibo ,budu probovat .
Glory
Дата: 16.12.2002 13:03:58
Set oSQLDMO = Createobject("SQLDMO.SQLServer")

If Not IsNull(oSQLDMO) Then
If IsEmpty(oSQLDMO.Connect("MYSERVER", "sa", "password")) Then
If Not IsEmpty(oSQLDMO.Databases("pubs").Tables("authors").Script(4, "c:\xx.txt", "mytable3")) Then
End if
oSQLDMO.Disconnect()
oSQLDMO.Close()
End if
End if
Set oSQLDMO = Nothing