2

今日、追跡が非常に困難なバグが私たちのプロジェクトに現れました。

データが挿入または更新されたときに、いくつかのストアド プロシージャを呼び出すなど、特定のアクションを実行するトリガーがあり、プログラムは正しく動作しているように見えました。そうでない場合を除いて。

何時間もの苦労の末、ようやく原因を突き止めました。EXEC ステートメントのパラメータ名の前に「@」がありません。次の最小限の例は、問題を示しています。

CREATE PROCEDURE EchoString @TheString nvarchar(30)
AS
SELECT @TheString 
GO

declare  @MyString char(10) = 'FooBar!'

exec EchoString @MyString
exec EchoString MyString -- Why does this work?

さて、これは疑問に思いました: これを許可する目的は何ですか? 下位互換性のためだけですか、それとも正当な使用例はありますか? それはどこかに文書化されていますか(私の弱いグーグル検索は空白になりましたが、「@」はグーグル対応ではありません。)

4

1 に答える 1