我有一个名为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
任何人都可以帮我解决吗???我感到困惑。
我有一个名为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
任何人都可以帮我解决吗???我感到困惑。
此错误由以下代码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
表中没有得到任何记录),所以您收到此错误消息
如果您加密的过程中没有要显示的文本。另外对于sqlclr过程,sp_helptext不能显示任何内容。执行sp_helptext'sp_helptext'来查看它的作用 – 2013-02-14 10:58:28
但是,在使用sp_helptext进行加密之后,应该显示“对象'CLRSPTest'的文本已加密。” – Debs 2013-02-14 11:34:53