Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Re: Esportare Stored Procedure in più file di testo

52 views
Skip to first unread message

Andrea Benedetti

unread,
Sep 7, 2006, 1:37:12 PM9/7/06
to
Salve Antonio,
"Antonio Budano" <antonio.budano_REMOVE_THIS_@_REMOVE_THIS_poste.it> ha
scritto nel messaggio news:OP5pbMq0...@TK2MSFTNGP03.phx.gbl...
> Ciao,
>
> Vorrei esportare le sp di un mio database in tanti file di testo da poi
> aggiungere alla mia soluzione di ssms.
> Ho provato il seguente comando ma mi scarica tutte le sp in un unico file
> di testo.
>
> bcp "SELECT routine_definition FROM MyDB.INFORMATION_SCHEMA.ROUTINES ORDER
> BY routine_name" queryout resultfile.txt -c -T
>
> Come posso fare a generare un file per ogni record ritornato e chiamare
> ogni file con routine_name+".sql"?

Difficile da fare con SQL Server...
Ovvero: non essendo un database relazione pensato per scrivere su file, nč
per fare cose come quella di cui hai bisogno, penso sia difficile farlo con
gli strumenti che nativamente hai a disposizione.

La cosa piů veloce che mi viene in mente č quella di creare una funzione (o
una procedura) con .Net che cicli gli oggetti che vuoi scriptare, li scripti
e generi il file di cui hai bisogno (con il nome dell'oggetto scriptato).

Hai dimestichezza con .Net e cose simili?

> Grazie
> Antonio

Ciao!
--
Andrea Benedetti
Microsoft MVP - SQL Server
www.absistemi.it - www.ugiss.org
http://blogs.ugidotnet.org/ab
http://mvp.support.microsoft.com
http://italy.mvps.org


Antonio Budano

unread,
Sep 7, 2006, 2:04:45 PM9/7/06
to
Ciao Andrea,

> Difficile da fare con SQL Server...

:-) :-) :-)

Dopo aver inserito il messaggio ho fatto qualche altra prova e ho trovato
la soluzione, direttamente in SQL Server.

La pubblico per chi ne abbia bisogno (bisogna attivare xp_cmdshell con
Surface Area Configuration tool oppurre con sp_configure, il comando non lo
conosco ma dal tool basta attivare una chekbox).
Non è elegante in quanto fa uso di cursori, ma è la prima cosa che mi è
venuta in mente, anche considerato che mi serve una tantum... Se qualcuno la
volesse ottimizzare...

DECLARE @command nvarchar(256)
DECLARE @routine_name nvarchar(128)
DECLARE routines_cursor CURSOR FOR
SELECT
routine_name
FROM
INFORMATION_SCHEMA.ROUTINES
ORDER BY
routine_name

OPEN routines_cursor
FETCH NEXT FROM routines_cursor INTO @routine_name
WHILE @@FETCH_STATUS = 0
BEGIN
SET @command = 'bcp "SELECT routine_definition FROM
MyEnterprise.INFORMATION_SCHEMA.ROUTINES WHERE routine_name = ''' +
@routine_name + '''" queryout c:\temp\' + @routine_name + '.sql -c -T'
EXEC xp_cmdshell @command
-- PRINT @command
FETCH NEXT FROM routines_cursor INTO @routine_name
END
CLOSE routines_cursor
DEALLOCATE routines_cursor


Antonio Budano

unread,
Sep 7, 2006, 1:28:30 PM9/7/06
to
Ciao,

Vorrei esportare le sp di un mio database in tanti file di testo da poi
aggiungere alla mia soluzione di ssms.
Ho provato il seguente comando ma mi scarica tutte le sp in un unico file di
testo.

bcp "SELECT routine_definition FROM MyDB.INFORMATION_SCHEMA.ROUTINES ORDER
BY routine_name" queryout resultfile.txt -c -T

Come posso fare a generare un file per ogni record ritornato e chiamare ogni
file con routine_name+".sql"?

Grazie
Antonio


Lorenzo Benaglia

unread,
Sep 7, 2006, 2:54:22 PM9/7/06
to
Antonio Budano wrote:
> Dopo aver inserito il messaggio ho fatto qualche altra prova e ho
> trovato la soluzione, direttamente in SQL Server.

Ciao Antonio,

se l'esportazione deve essere effettuata una tantum, perché non utilizzare
l'apposita opzione di generazione degli script presente in Enterprise
Manager o SQL Server Management Studio in base alla versione che stai
utilizzando?

Ciao!

--
Lorenzo Benaglia


Microsoft MVP - SQL Server

http://blogs.dotnethell.it/lorenzo
http://italy.mvps.org


Andrea Benedetti

unread,
Sep 7, 2006, 2:54:16 PM9/7/06
to
Ciao Antonio,
"Antonio Budano" <antonio.budano_REMOVE_THIS_@_REMOVE_THIS_poste.it> ha
scritto nel messaggio news:%23gvEsgq...@TK2MSFTNGP02.phx.gbl...
[cut]

> La pubblico per chi ne abbia bisogno (bisogna attivare xp_cmdshell con
> Surface Area Configuration tool oppurre con sp_configure, il comando non
> lo conosco ma dal tool basta attivare una chekbox).
> Non č elegante in quanto fa uso di cursori, ma č la prima cosa che mi č
> venuta in mente, anche considerato che mi serve una tantum... Se qualcuno
> la volesse ottimizzare...
[cut]

Grazie di aver condiviso la soluzione che hai trovato.
L'unico (e, per me, grande) problema č proprio l'abilitazione della
procedura estesa xp_cmdshell.

Certo, se non ci sono altre soluzioni ok...
Ma se tu riuscissi a costruire anche una soluzione basata su altri metodi
alternativi e lasciassi disabilitata la procedura incriminata personalmente
sarei piů felice! :-)

Antonio Budano

unread,
Sep 7, 2006, 3:10:56 PM9/7/06
to
Ciao Lorenzo,

> se l'esportazione deve essere effettuata una tantum, perché non utilizzare
> l'apposita opzione di generazione degli script presente in Enterprise
> Manager o SQL Server Management Studio in base alla versione che stai
> utilizzando?

Adesso sto sviluppando in locale con SQL 2005 Developer Edition, per cui ho
potuto abilitare la xp_cmdshell.
A quale opzione ti rifirisci? Quello che ho trovato è di fare click con il
tasto dx sulla sp, script stored procedure as-> CREATE TO -> file, ma
doverlo fare per 642 sp diventava un incubo...

Ciao
Antonio


Lorenzo Benaglia

unread,
Sep 7, 2006, 3:42:49 PM9/7/06
to
Antonio Budano wrote:
> Adesso sto sviluppando in locale con SQL 2005 Developer Edition, per
> cui ho potuto abilitare la xp_cmdshell.
Male, hai inserito un bel buco di sicurezza :-)

> A quale opzione ti rifirisci? Quello che ho trovato è di fare click
> con il tasto dx sulla sp, script stored procedure as-> CREATE TO ->
> file, ma doverlo fare per 642 sp diventava un incubo...

SSMS offre lo Script Wizard richiamabile selezionando il database, tasto DX,
Tasks, Generate Scripts che ti permette volendo di esportare tutti gli
oggetti di un db.
Purtroppo sto notando che a differenza dell'omonima opzione presente in
Enterprise Manager, hanno tolto la possibilità di generare un file per ogni
oggetto... bene, si tratta dell'ennesima "str....ta".

Facendo una ricerca tra i feedback ho trovato questo commento:

"Management Studio does not allow scripting of a group of objects to one
script file per object"
https://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=124774

"Thank you for your feedback. we will address this in a future release.
Thanks,
Ramesh Singh"

Invito tutti a votare il problema in modo che il team di sviluppo lo prenda
in considerazione, possibilmente con il prossimo Service Pack.

Andrea Montanari

unread,
Sep 7, 2006, 3:50:35 PM9/7/06
to
salve,

in aggiunta vorrei anche indicare amScript, liberamente disponibile presso
http://www.asql.biz/it/Download2005.aspx :D
saluti
--
Andrea Montanari (Microsoft MVP - SQL Server)
http://www.asql.biz http://italy.mvps.org
DbaMgr2k ver 0.20.0 - DbaMgr ver 0.64.0 and further SQL Tools
--------- remove DMO to reply


Antonio Budano

unread,
Sep 7, 2006, 4:14:15 PM9/7/06
to
> SSMS offre lo Script Wizard richiamabile selezionando il database, tasto
> DX, Tasks, Generate Scripts che ti permette volendo di esportare tutti gli
> oggetti di un db.

E' vero, l'avevo dimenticato.... Eppure è stata la prima cosa che ho usato
appena uscito SQL 2005.
Mah, ho bisogno di (altre) ferie .

> Purtroppo sto notando che a differenza dell'omonima opzione presente in
> Enterprise Manager, hanno tolto la possibilità di generare un file per
> ogni oggetto... bene, si tratta dell'ennesima "str....ta".

Comunque non faceva quello che mi serviva.

Ciao
antonio


Lorenzo Benaglia

unread,
Sep 7, 2006, 4:20:00 PM9/7/06
to
Antonio Budano wrote:
>> Purtroppo sto notando che a differenza dell'omonima opzione presente
>> in Enterprise Manager, hanno tolto la possibilità di generare un
>> file per ogni oggetto... bene, si tratta dell'ennesima "str....ta".
>
> Comunque non faceva quello che mi serviva.
Purtroppo no, ma dovrebbe permettere il salvataggio di un file per oggetto,
esattamente come accadeva con le versioni precedenti.
Se lo ritieni opportuno vota il commento che ho segnalato, ti assicuro che
il dev team prende molto seriamente tali suggerimenti...
0 new messages