Utilisation de sp_helptext dans ASP classique

Lorsque je veux get la définition d'une stored procedure (dans SQL Server), j'utilise SQL Server Management Studio.

Je lance parfois `sp_helptext 'pour afficher la définition d'une procédure stockée.
Lien: https://msdn.microsoft.com/fr-fr/library/ms176112.aspx

En un mot, j'aimerais avoir une simple window popup html qui afficherait la définition de toute procédure stockée en text.

Le code asp ci-dessous établit une connection réussie avec ma database, mais je ne reçois aucune sortie.

 <% ' ....... sql = "exec sp_helptext 'some_ProcName_Here'" objRs.open sql, objConn Text=objRs("Text") response.write(Text) %> 

J'ai également essayé de créer une nouvelle procédure stockée qui prend 1 paramètre, ce qui permettrait d'exécuter le sp_helptext .

 <% ' ....... sql = "exec See_Proc_Definition @ProcName=some_ProcName_Here" objRs.open sql, objConn Text=objRs("Text") response.write(Text) %> 

Aucun d'entre eux n'affiche quoi que ce soit, mais je ne reçois aucune erreur returnnée non plus. Quelqu'un peut-il voir ce que je fais mal?

Le problème est que vous sp_HelpText uniquement la première ligne de la sortie sp_HelpText . SQL Server renvoie la sortie en tant qu'un jeu d'loggings de colonne unique contenant une colonne appelée [Text] .

Cela signifie que vous devez parcourir les lignes pour afficher le rest de la sortie.

En utilisant votre premier exemple;

 <% ' ....... sql = "exec sp_helptext 'some_ProcName_Here'" objRs.open sql, objConn Do While Not objRs.EOF Text=objRs("Text") response.write(Text) objRS.MoveNext Loop %> 

Ce n'est pas idéal mais cela fonctionnera, par expérience (en particulier avec des procédures stockées plus complexes) Je trouve que quelque chose comme ça est meilleur à long terme;

 Dim sql, cmd, rs, data Set cmd = Server.CreateObject("ADODB.Command") sql = "sp_HelpText" With cmd 'Use your connection ssortingng instead of instantiating an ADODB.Connection object. .ActiveConnection = conn_ssortingng .CommandType = adCmdStoredProc .CommandText = sql .Parameters.Append(.CreateParameter("@objname", adVarWChar, adParamInput, 776)) .Parameters.Append(.CreateParameter("@columnname", adVarWChar, adParamInput, 128)) Set rs = .Execute(, Array("some_ProcName_Here")) If Not rs.EOF Then data = rs.GetRows() Call rs.Close() Set rs = Nothing End With Set cmd = Nothing 

Cette méthode vous donne un tableau bidimensionnel contenant datatables de ligne dans la variable de data . Vous pouvez ensuite utiliser les techniques Array standard pour manipuler la sortie.

 Dim output, row, rows If IsArray(data) Then rows = UBound(data, 2) For row = 0 To rows output = output & "<br />" & data(0, row) Next Call Response.Write(output) End If 

Liens

  • Utilisation de METADATA pour importer des constantes DLL – Si vous rencontrez des problèmes avec les constantes ADO ( adCmdStoredProc etc.) cela vous permettra de résoudre le problème.