RuleId |
SR0016 |
カテゴリ |
Microsoft.Naming |
互換性に影響する変更点 |
あり |
原因
1 つ以上のストアド プロシージャにプレフィックスとして sp_ が使用されています。
規則の説明
SQL Server では、sp_ プレフィックスはシステム ストアド プロシージャを指定するときに使用します。 作成するストアド プロシージャにこのプレフィックスを使用すると、そのプロシージャの名前が、将来作成されるシステム ストアド プロシージャの名前と競合する可能性があります。 このような競合が発生した場合、参照をスキーマで修飾せずにアプリケーションからプロシージャを参照すると、そのアプリケーションは中断することがあります。 この場合、名前は作成したプロシージャではなくシステム プロシージャにバインドされます。
違反の修正方法
この問題を解決するには、ストアド プロシージャ名の sp_ を別のプレフィックスに置き換えるか、プレフィックスをまったく使用しないようにする必要があります。 データベース リファクタリングを使用して、この警告の原因となるすべてのプロシージャの名前を更新することをお勧めします。 データベース リファクタリングを使用することにより、各プロシージャの名前だけでなく、データベース プロジェクト全体でそのプロシージャへ参照しているものがあれば、それらの参照も更新できます。 詳細については、「データベース オブジェクトへのすべての参照の名前を変更する」を参照してください。
警告を抑制する状況
ストアド プロシージャを呼び出すアプリケーションを変更できない場合は、この警告を抑制してもかまいません。
使用例
最初の例では、プロシージャ名が原因でこの警告が発行されます。 2 番目の例では、プロシージャは sp_ プレフィックスの代わりに usp_ プレフィックスを使用しているので、警告は発行されません。
CREATE PROCEDURE [dbo].[sp_procWithWarning]
(
@Value1 INT,
)
AS
BEGIN
-- Additional statements here
RETURN 0;
END
CREATE PROCEDURE [dbo].[usp_procFixed]
(
@Value1 INT,
)
AS
BEGIN
-- Additional statements here
RETURN 0;
END