当我想获得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)
%>
这些都没有显示任何内容,但我也没有收到任何返回的错误。 谁能看到我做错了什么?
答案 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
<强>链接强>
adCmdStoredProc
等),这将为您解决问题。