次の方法で共有


SR0016: ストアド プロシージャのプレフィックスに sp_ を使用することは避けてください

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

参照

概念

スタティック分析によるデータベース コードの改善

Database Edition の用語の概要