当我想要获取存储过程
的定义(在 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
链接
- Using METADATA to Import DLL Constants - 如果您在使用 ADO 常量(
adCmdStoredProc
等)时遇到问题,这将为您解决。
关于sql-server - 在经典 asp 中使用 sp_helptext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30481975/