暗号化した 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
では、なぜ最初のものでエラーが発生し、2 番目のものではエラーが発生しないのでしょうか...これは、 のデータをチェックすることで説明できます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
(テーブル内のレコードを取得しない) であるため、このエラー メッセージが表示されます。