2013-02-14 103 views
1

我有一個名爲dbo.CLRSPTest的程序,我已加密。當我執行程序時,它會被執行,但當我使用sp_helptext CLRSPTest查看代碼時會報錯,例如Msg 15197, Level 16, State 1, Procedure sp_helptext, Line 107 There is no text for object 'CLRSPTest'.消息15197,級別16,狀態1,過程sp_helptext,行107

任何人都可以幫我解決嗎???我感到困惑。

+1

如果您加密的過程中沒有要顯示的文本。另外對於sqlclr過程,sp_helptext不能顯示任何內容。執行sp_helptext'sp_helptext'來查看它的作用 – 2013-02-14 10:58:28

+0

但是,在使用sp_helptext進行加密之後,應該顯示「對象'CLRSPTest'的文本已加密。」 – Debs 2013-02-14 11:34:53

回答

0

此錯誤由以下代碼sp_helptext的

if (select count(*) from syscomments c, sysobjects o where o.xtype not in ('S', 'U') 
    and o.id = c.id and o.id = @objid) = 0 
    begin 
    raiserror(15197,-1,-1,@objname) b 
    return (1) 
    end 

提出這只是意味着任何物體(未表或系統對象),其不具有線syscomments將返回此錯誤。

加密對象在syscomments表中有記錄,在xtext字段中有NULL,所以它們不會被前面的代碼捕獲。您爲這些對象獲得的消息來自此查詢。

if (select count(*) from syscomments where id = @objid and encrypted = 0) = 0 
    begin 
    raiserror(15471,-1,-1,@objname) 
    return (0) 
    end 

現在爲什麼我們得到的第一個和第二個沒有錯誤的錯誤...這可以通過在master..sysmessages檢查數據來說明。

select error, severity, description 
    from master..sysmessages 
where error in (15197, 15471) 
    and msglangid = 1033 

該查詢將返回:

error severity description 
15197 16 There is no text for object '%s'. 
15471 10 The text for object '%ls' is encrypted. 

這裏我們可以看到錯誤15197具有嚴重性16和錯誤15471已嚴重10.在msdn它解釋錯誤級別0-9不是「提出了」並出於兼容性的原因將錯誤級別10轉換爲錯誤級別0。

所以得出結論。 因爲您的過程是SQL CLR過程(它在syscomments表中沒有得到任何記錄),所以您收到此錯誤消息

相關問題