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

規則 ID

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

参照

概念

データベース コードの分析によるコードの品質の向上