sql-server - 在经典 asp 中使用 sp_helptext

标签 sql-server stored-procedures asp-classic

当我想要获取存储过程的定义(在 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) 
%>

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

最佳答案

问题是您只显示 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

链接

关于sql-server - 在经典 asp 中使用 sp_helptext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30481975/

相关文章:

sql-server - Mssql 中 UNIQUE KEY 约束的重复空值违规

sql - SYSDATETIME() 是否比 GETDATE() 花费更多?

javascript - 使用 JavaScript 将表一个 <td> 值与同一行的另一个 <td> 值进行比较

javascript - 从一个页面链接到另一个经典 ASP 的下拉列表中选择值

json - 在 JPA 中检索 Postgres 函数 JSON 类型

sql-server - 防止经典 ASP 中自由响应文本字段的 SQL 注入(inject)

sql-server - 如何在sql中连接两个字符串并用0填充一个字符串?

php - 在 PHP 中使用 if 语句和 $GET 的正确方法

MySQL - 你的 SQL 语法有错误;检查与您的 MariaDB 服务器版本对应的手册以了解正确的语法 - phpMyAdmin

java - 如何从Spring Jdbc中的存储过程读取返回值(过程中没有输出参数)