2

我有一个名为 dbo.CLRSPTest 的过程,我已经对其进行了加密。当我执行该过程时,它会被执行,但是当我使用 sp_helptext CLRSPTest 查看代码时会引发错误,即Msg 15197, Level 16, State 1, Procedure sp_helptext, Line 107 There is no text for object 'CLRSPTest'.

谁能帮帮我???我越来越困惑。

4

1 回答 1

1

此错误由 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将返回此错误。

加密对象在 xtext 字段中的syscomments表中有一条记录,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

于 2013-02-14T14:14:27.967 回答