なぜ末尾はSQLでエラーを投げ一貫性なく設定されていますか?
-
13-09-2019 - |
質問
私は、弊社のWebアプリケーションのいずれかからのエラーで探しています、そして、それはデータベースのレコードを更新する責任があったストアドプロシージャを呼び出していました。
このストアドプロシージャは問題なく数週間のために働いています。デバッグ我々は原因がストアドプロシージャ内であることが判明しながら1日には、エラーを投げ始めます。
これは、基本的にこのようなステートメントを持っていた。
Begin
// Do Stuff
Set
End
SET
は実際には何も設定しないようにします。何らかの理由で、これは当社のサーバー上で完全に罰金で実行され、それが不満を開始することを決めた以前の今日まで、クライアントサーバー上で正常に動作していました。 (不適切な構文エラー)
この動作の急激な変化の原因となるSQL Serverの設定のいずれかのタイプがありますか?
の の明確化 - SET
はいつもの手順でてきました。そして、それ自体でSET
を実行している、またはストアドプロシージャ内の唯一のステートメントとして私のために実際の作業ではありません。これは問題、それのいけないの作品です。だから、それは失敗しなければならないとき、それを動作させる原因となるものはありますか?
解決
そのようなSET
と手順は、通常SET
に到達できない場合でも、コンパイルに失敗します:
alter procedure dbo.testproc as
begin
return 1;
set
end
Incorrect syntax near the keyword 'SET'.
ALTERが失敗したので、私は手順が最初の場所でデータベースに終わる可能性がどのように見ることができませんか?
それともあなたは、SQL Server 2000の互換モードで実行されていた(まだこれを可能にした。)SQL Server 2005または高い、手順を壊すとの互換性のMDOEを変更します。
他のヒント
自身によって、「SET」を実行すると、エラーが発生します。私はもともとあなたがラインに到達することはないために引き起こされたコード(IFS、返品、型GOTOなど)を分岐していることを示唆しているつもりだった...しかし、私はスタンドとしてこれを含むストアドプロシージャを作成することができないことがわかります単独の声明ます。
スクリプトアウト手続きをして(別の名前で)それを再作成しようとした場合は、それを作成することができますか?
そのスクリプトを掲載する価値、またはあなたが快適に公開されているとして、それをできるだけ多くすることがございます。