2013-02-14 428 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表中没有得到任何记录),所以您收到此错误消息

相关问题