Salvare le stored procedure di un Server SQL

da quando ho iniziato a scrivere stored per SQL ho avut il problema di tenere da qualche parte che non fosse SQL le stored che scrivevo.
così mi son messo di buona lena ed approfittando di una sera con la signora in ferie (sì lo sò c’è altro da fare ma tant’è.. ) ho scritto un pò di righe

ed eccole qua, quando imparerò a copincollare per bene il codice dentro sto blocco appunti che è il mio blog sarà anche un pò più leggibile..

Max

 

PROCEDURE [dbo].[Uds_Save_Stored_Procedure]
AS
DECLARE @StrSQL NVarChar(400)
DECLARE @Db NVarChar(400)
DECLARE @Sp NVarChar(400)
DECLARE @i int
DECLARE @I_SP Int
DECLARE @cmd NVarChar(1000)
DECLARE @Path NVarChar(1000)
Set @path ='c:\trace\'
BEGIN
SET NOCOUNT ON;
SET @StrSQL = ' IF OBJECT_ID(''tempdb.dbo.##DB_List'') IS NOT NULL' + CHAR(13)
+ ' DROP TABLE ##DB_List ' + CHAR(13) + CHAR(13)
+ ' CREATE TABLE ##DB_List (' + CHAR(13)
+ ' id int identity(1,1)' + CHAR(13)
+ ' ,DB nvarchar(max)' + CHAR(13)
+ ' )' + CHAR(13) + CHAR(13)
+ ' Insert Into ##DB_List (DB)' + CHAR(13)
+ ' SELECT name ' + CHAR(13)
+ ' FROM master..sysdatabases' + CHAR(13)
+ ' where name not in (''master'',''tempdb'',''model'',''msdb'')' + CHAR(13)
--PRINT @strsql
EXEC sp_executesql @strsql
SET @StrSQL = ' IF OBJECT_ID(''tempdb.dbo.##SP_List'') IS NOT NULL' + CHAR(13)
+ ' DROP TABLE ##SP_List ' + CHAR(13) + CHAR(13)
+ ' CREATE TABLE ##SP_List (' + CHAR(13)
+ ' id int identity(1,1)' + CHAR(13)
+ ' ,DB nvarchar(max)' + CHAR(13)
+ ' ,SP nvarchar(max)' + CHAR(13)
+ ' )' + CHAR(13) + CHAR(13)
--PRINT @strsql
EXEC sp_executesql @strsql
SET @i = 0
select top 1 @i = id
from ##DB_List
where id > @i
order by id
While @@Rowcount = 1
BEGIN
select @db = DB
from ##DB_List
where id = @i
SET @StrSQL = ' USE [' + @Db + ']' + CHAR(13) + CHAR(13)
+' Insert into ##SP_List (DB,SP)' + Char(13)
+' SELECT ''' + @db +''' ,name' + Char(13)
+' FROM sys.objects' + Char(13)
+' WHERE type = ''P''' + Char(13)
+' AND left(name,3) ''sp_''' + Char(13)
+' AND left(name,3) ''dt_''' + Char(13)
+' AND left(name,7) ''aspnet_''' + Char(13)
EXEC sp_executesql @strsql
--PRINT @strSQL
select top 1 @i = id
from ##DB_List
where id > @i
order by id
END
SET @i = 0
select top 1 @i = id
from ##SP_List
where id > @i
order by id
While @@Rowcount = 1
BEGIN
select @db = DB, @sp = SP
from ##SP_List
where id = @i
SET @strSQL = ' Use [' + @Db + ']' + char(13) + char(13)
+ ' IF OBJECT_ID(''tempdb.dbo.##sp_helptext'') IS NOT NULL' + char(13)
+ ' drop table ##sp_helptext ' + char(13)
+ ' create table ##sp_helpText (' + char(13)
+ ' id int identity(1,1)' + char(13)
+ ' ,tmptext nvarchar(max))' + char(13) + char(13)
+ ' insert into ##sp_helptext exec sp_helptext ['+ @Sp +']'+ char(13)
--PRINT @strsql
EXEC sp_executesql @strsql
set @i_sp = 0
select top 1 @i_sp = id
from ##sp_helpText
where id > @i_sp
order by id
while @@rowcount = 1
BEGIN
SELECT @cmd = 'echo ' + left(tmptext,LEN(tmptext)-2) + ' >> '+ @Path + '[' + @db + '].dbo.[' + @Sp + '].sql'
from ##sp_helpText
where id = @i_sp
--PRINT @cmd
exec master..xp_cmdshell @cmd
select top 1 @i_sp = id
from ##sp_helpText
where id > @i_sp
order by id
END
select top 1 @i = id
from ##SP_List
where id > @i
order by id
END
END
Annunci
Pubblicato in sql | Contrassegnato | Lascia un commento

T-SQL usare una variabile nel predicato IN()

Articolo interessantissimo che ho letto solo velocemente. da commentare appena possibile.

Link

Pubblicato in Dove Stiamo Andando?, sql | Lascia un commento

rap futuristico!

Pubblicato in Dove Stiamo Andando? | Lascia un commento

yyyymmddhhnnss difficilissimo in dos script..

problema, nominare un file o inserire in una variabile di ambiente la data ed ora attuale nel formato: YYYYMMDDHHNNSS

di solito è una vera rottura, normalmente si usa un arzigogolo strano utilizzando le variabili d’ambiente %DATE% e %TIME% che però hanno un difetto, sono localizzate, quindi uno script che funziona su una localizzazione Italiana non funziona su una inglese e viceversa.. che fare in ambienti misti?

ecco la soluzione, uno script e una riga di codice da inserire nel nostro file batch:

create uno script chiamato dataora.vbs quindi inserite all’interno la seguente stringa

Wscript.Echo year(now())&right("00"&month(now()),2)&right("00"&day(now()),2)&right("00"&hour(now()),2)&right("00"&minute(now()),2)&right("00"&second(now()),2)

quindi la riga magica da utilizzare nei vostri batch è la seguente:

for /F %%a in ('cscript /nologo dataora.vbs ^|find /V ""') DO SET DATAORA=%%a

 

da ora potrete utilizzare la variabile d’ambiente %DATAORA% contenente la tanto agognata stringa

enjoy!

Pubblicato in Batch Caverna, Utilità | Contrassegnato , , , , , | Lascia un commento

il magico mondo di SQL e XML

creare una struttura dati XML tramite T-SQL?

Facile!!

metterlo su un file?!

Difficilissimo!

Ebbene sì è un vero casino, pubblico un link di un articolo per un argomento che approfondirò in quanto davvero interessante.

http://www.15seconds.com/issue/001102.htm

Pubblicato in Dove Stiamo Andando? | Contrassegnato , , | Lascia un commento

scrivere sul registry via VMI

riposto il post di active experts

http://www.activexperts.com/activmonitor/windowsmanagement/adminscripts/registry/

Pubblicato in Dove Stiamo Andando? | Lascia un commento

Transaction log, questo sconosciuto..

il transaction log, questo sconosciuto.. tutti (o quasi) sappiamo che il transaction log, è “quel file che mantiene le transazioni effettuate, o da effettuare, sul DB”.. ma come funziona? qual’è la sua configurazione migliore per il nostro DB? come manutenerlo al meglio?

mi sto cimentando in quest’impresa ardua e ho trovato un paio di articoli “terra terra” che possono aiutare a fare un pò di chiarezza a chi, ad esempio come me, ha diverse nozioni da riordinare.

questo è un articoli di MS molto carino in cui al termine c’è proprio uno specchietto che è possibile utilizzare per capire qual’è il recovery model per il DB migliore per il proprio database

http://msdn.microsoft.com/en-us/library/ms175987.aspx

in questo invece (me lo sto ancora leggendo) un pò di tips per la manutenzione del TL.

http://technotes.towardsjob.com/sql-server/dba-tips-maintenance-plan-to-avoid-transaction-log-file-growth/

Pubblicato in Server che passione, sql, Utilità, windows | Contrassegnato , | Lascia un commento

Convertire un Intero in un Esadecimale e utilizzarlo come testo in SQL – Update

Ecco una cosina che mi ha fatto perdere quasi un giorno… in Transact SQL esiste la CONVERT che è in grado di convertire un valore in altri formati. Per quel che mi riguarda avevo la necessità di convertire un numero da decimale a esadecimale e quindi di trattare il risultato ottenuto come una stringa di testo.

Essendo io un pessimo conoscitore di TRANSACT (come di molti altri linguaggi) mi sono creato una funzioncina che è possibile chiamare utilizzando il suo nome preceduto dal prefisso dbo.

Update: Grazie a Gabriele (che legge il blog! fighissimo!) ho scoperto una funzione che ieri nelle mie ricerche non avevo trovato, al che deduco anche altre cose ma le risparmio…ovvero, esiste già una funzione di SQL che permette di convertire un esadecimale in testo!!… 😦 Eccola qua:

master.dbo.fn_varbintohexstr

ed ecco un esempio di codice.

SELECT master.dbo.fn_varbintohexstr(CAST(Addr1 AS VARBINARY)) AS Expr1
FROM Customer
SELECT master.dbo.fn_varbintohexstr(CAST(Addr1 AS VARBINARY)) AS Expr1
FROM Customer

E io che ci ho perso tutto quel tempo.. vabhe lascio il codice per me come appunto e per chi necessitasse di qualche (pessimo) spunto.

Continua a leggere

Pubblicato in Batch Caverna, sql, Utilità, windows | Contrassegnato , , , | Lascia un commento

accedere ad un DB SQL da script

mi si è presentata la necessità di creare uno script che prendesse come parametri dei dati presenti su un DB SQL. Come molti sapranno, sulla macchina dove sql è installato è possibile utilizzare l’ottimo OSQL che fornisce un gran numero di opzioni, ma se dovessi far girare lo script su un client e non sul server?

Utilizzando un pò di VBScript è  bastato fare un pò di ricerche su google per arrivare al risultato che vedere in fondo.

Accetta in ingresso una serie di parametri, a partire dai più ovvii, cioè nome della macchina server, nome del DB, utente e password e la query SQL da eseguire, fino a (li ho implementati in quanto servivano per i miei scopi) la possibilità di visualizzare a schermo il risultato della query e di decidere quale separatore utilizzare fra un campo e l’altro.

a disposizione di chiunque ne abbia bisogno 🙂

Continua a leggere

Pubblicato in Batch Caverna, Utilità, windows | Contrassegnato , , | Lascia un commento

una finestra sul mondo

Pubblicato in windows | Contrassegnato | Lascia un commento