Stampare la chiamata di una stored procedure di sql server
- Dettagli
- Categoria principale: Code Snippets
- Categoria: ASP Classic
- Pubblicato 09 Dicembre 2011
- Visite: 199
Talvolta per ragioni di debug, si rende necessario stampare la chiamata di un store procedure per poi farla girare dentro il query analyzer o il management studio di sql server e per quanto mi riguarda, mi ero stancato di scrivere sempre le solite "response.write". Quindi ho fatto questa piccola funzione a cui si passa un "adodb.command" già pronto e questa restituisce la stringa della chiamata per sql server. Al momento la funzione prende in considerazione solo i parametri di input e di output ma non i parametri di ritorno delle store procedure pertanto in caso si volesse chiamare una procedura che richiede la lettura dei valori di ritorno, questa funzione deve essere modificata.
function writeStoreProcedure(cmd)
dim prmValue, commandTextValue, prmValueList, declaration, prmName, s
'con un po' replace ripulisco il la proprietà CommandText
commandTextValue = replace(cmd.CommandText, "{ call ", "")
commandTextValue = replace(commandTextValue, "?", "")
commandTextValue = replace(commandTextValue, ",", "")
commandTextValue = replace(replace(commandTextValue, "(", ""), ")", "")
commandTextValue = replace(commandTextValue, "}", "")
commandTextValue = "exec " & Trim(commandTextValue)
'ciclo su i parametri presenti nel comando della procedura
for each prm in cmd.parameters
prmValue = prm.value
'controllo quelli che sono di tipo stringa e gli metto gli apici
select case prm.type
case adChar, adVarChar, adWChar, adLongVarChar, adVarWChar, adLongVarWChar
'se ho dei parametri di output faccio anche dichiarazione per sql server e aggiungo il parametro alla lista
if prm.Direction = adParamOutput then
prmName = replace(prm.name, "@", "")
declaration = declaration & "declare @" & prmName & " nvarchar(4000)" & vbNewLine
prmValue = " @" & prmName & " output,"
else
prmValue = " '" & prmValue & "',"
end if
prmValueList = prmValueList & prmValue
case else
if prm.Direction = adParamOutput then
prmName = replace(prm.name, "@", "")
declaration = declaration & "declare @" & prmName & " bigint" & vbNewLine
prmValue = " @" & prmName & " output,"
else
prmValue = " " & prmValue & ","
end if
prmValueList = prmValueList & prmValue
end select
next
s = declaration & commandTextValue & prmValueList
writeStoreProcedure = left(s, len(s)-1)
end function



