2015-05-27 82 views
2

當我想要獲得stored procedure(在SQL Server中)的定義時,我使用SQL Server Management Studio。在傳統asp中使用sp_helptext

我有時會運行`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) 
%> 

這些無論顯示什麼,但我沒有得到任何返回的錯誤都不是。 任何人都可以看到我做錯了什麼?

+2

這裏的問題是'sp_helptext'每行產生一行,所以你需要'做雖然不objRs.EOF'並使用'objRs.MoveNext'來移動光標到每一行。我的猜測是你試圖顯示的定義包含一個空白的第一行。 – Lankymart

+1

如果這是真的,那麼應顯示第一行? OP說沒有顯示? –

+0

這是一個存儲過程,但它被稱爲查詢 – Mackan

回答

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可變的行的數據的2維數組。然後您可以使用標準的數組技術來處理輸出。

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 

鏈接

+0

OP提及,不顯示? –

+1

@WhirlMind至於OP可以告訴沒有輸出顯示,這並不意味着代碼不工作,它只是意味着輸出中的第一行是空白的。 – Lankymart

+1

_Command_;的加分點)另外'Execute(,Array(「some_ProcName_Here」))'對我來說是新聞。 – Mackan