在经典的asp中使用sp_helptext

时间:2015-05-27 12:08:31

标签: sql-server stored-procedures asp-classic

当我想获得stored procedure的定义时(在SQL Server中)我使用SQL Server Management Studio。

我有时运行`sp_helptext'来输出存储过程的定义 链接:https://msdn.microsoft.com/en-us/library/ms176112.aspx

简而言之,我希望有一个简单的html弹出窗口,可以将任何存储过程的定义输出到文本。

下面的asp代码正在成功连接到我的数据库,但我没有得到任何输出。

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

我还尝试创建一个带有1个参数的新存储过程,该参数将执行sp_helptext

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

这些都没有显示任何内容,但我也没有收到任何返回的错误。 谁能看到我做错了什么?

1 个答案:

答案 0 :(得分:2)

问题是您只显示sp_HelpText输出的第一行。 SQL Server将输出作为包含名为[Text]的列的单列记录集返回。

这意味着您需要遍历行以显示输出的其余部分。

使用你的第一个例子;

<% 
' .......
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
%>

这不是理想的,但可以从经验(特别是使用更复杂的存储过程)中发挥作用我觉得从长远来看这样的事情会更好;

Dim sql, cmd, rs, data

Set cmd = Server.CreateObject("ADODB.Command")
sql = "sp_HelpText"
With cmd
  'Use your connection string instead of instantiating an ADODB.Connection object.
  .ActiveConnection = conn_string
  .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

此方法为您提供包含data变量中行数据的二维数组。然后,您可以使用标准数组技术来操作输出。

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

<强>链接