我有一个名为 dbo.CLRSPTest 的过程,我已经对其进行了加密。当我执行该过程时,它会被执行,但是当我使用 sp_helptext CLRSPTest 查看代码时会引发错误,即Msg 15197, Level 16, State 1, Procedure sp_helptext, Line 107
There is no text for object 'CLRSPTest'.
谁能帮帮我???我越来越困惑。
我有一个名为 dbo.CLRSPTest 的过程,我已经对其进行了加密。当我执行该过程时,它会被执行,但是当我使用 sp_helptext CLRSPTest 查看代码时会引发错误,即Msg 15197, Level 16, State 1, Procedure sp_helptext, Line 107
There is no text for object 'CLRSPTest'.
谁能帮帮我???我越来越困惑。
此错误由 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
)