問題タブ [raiserror]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
285 参照

tsql - 再コンパイル時のストアドプロシージャの構文エラーがキャッチによってトラップされ、空の結果セットが返される

問題を特定しようとしています(stackoverflow.com/q/483787/537284のトピックに似ています)。この問題はストアドプロシージャに関係しており、週に1回「ランダムに」発生します。問題を再現するために、さまざまな手順バージョンを作成して、考えられる良い結果と悪い結果を模倣しました。

  • 優れた複数行の単一結果セット。
  • 情報メッセージを含む優れた複数行の単一結果セット。
  • Raiserror(レベル11未満)を使用した優れた複数行の単一結果セット。
  • Printを使用した優れた複数行の単一結果セット。
  • 良い空の単一の結果セット。
  • 不正な構文エラー。
  • try/catchでの不正な構文エラー。
  • Raiserror(レベル11)の不良エラー。
  • Raiserror(レベル11)およびtry/catchでの不良エラー。

これらのテスト間で、try / catchバージョンの構文エラーは、私が期待するものとは異なる動作をしました。2つの結果セット(1つは空でもう1つはcatch命令から)が返されます。

構文エラーは部分的に実行されますか?試行ではなく、キャッチブロックの結果を期待していました。これをRaiserrorと比較し、重大度11を使用すると、1つの結果セットのみが返されるcatchブロックがトリガーされます。構文エラーとRaiserrorの違いは何ですか?

これが私のテスト手順です:

これが私のテストテーブルです(他の人からリッピングされました):

0 投票する
1 に答える
940 参照

sql - T-SQL Raiserror は、Char(10) に変換された日時が含まれている場合、メッセージを失います

さて、T-SQL (SQL-2000) でエラーを発生させようとしています。ベースの SQL コードは次のようになります。. .

レイザーエラーをキャッチする VS2008 のマネージ C++ コードは次のようになります。. .

これで、「C++」コード内のキャッチにブレークポイント セットが設定されました。raiserror メッセージに日時が CHAR として含まれている場合、excp->Message は空です。datetime を CHAR として削除し、「ここでエラーが発生しました」などのハードコーディングされた raiserror メッセージを送信すると、excp->Message が完了し、raiserror メッセージが入力されます。

他の誰かがこの種の活動を見たことがありますか? この通話の両側で何ができますか。. . つまり、SQL 側または C++ 側で、raiserror メッセージに含まれるこの日時文字列を取得しますか????

助けてください。ハマった!

ありがとう !

0 投票する
1 に答える
330 参照

tsql - SQL Serverクエリの処理に時間がかかりすぎますか?

ストアドプロシージャ内に複雑なクエリがあります。proc自体の中で、30秒のしきい値が経過したと思われる場合は、処理にかかる時間を判断し、RAISERRORを実行します(これにより、人々はいくつかの最適化を行う必要があります)。

すべてTSQLコード内で、それを実現するための適切な方法を誰かが言うことができますか?

ありがとう。

0 投票する
1 に答える
1300 参照

sql-server - Sqlserver 上の Perl DBI (DBD::ODBC) でエラー コード、タイプ、状態を取得できない

私は以下を実行してinsert stmntを実行し、意図的なRAISERRORを実行するperlスクリプトを持っています。エラーが生成されていることがわかりますが、間違ったエラー コード - SQL-42000 がありますが、エラー診断メソッドは何も返しません。$DBI::err,$DBI::errstr,$DBI::state を使用しても、正しいものが出力されません。$DBI::errstr だけが正しく起動しています。

出力:

0 投票する
1 に答える
1156 参照

.net - SQL Server からアプリケーションでイベントを発生させるための SQL Server クエリ通知に代わるスケーラブルな方法はありますか?

SQL Server Query Notifications は優れたツールですが、うまくスケーリングできるように構築されていないようです。通知が必要な/必要なすべてのアプリケーションは、通知が必要な間 (通常は、アプリケーションが実行されている間)、データベースへの接続を開いたままにしておく必要があります。

私は創造的な解決策に対してオープンです。頭のてっぺんから、クライアント アプリケーションに通知できる SQL Server クエリ通知にサブスクライブするサービスをサーバーに配置することを考えました。この場合、開いているデータベース接続は 1 つだけです (そして、常に開いたままにしておく必要はありません)。その後、クライアント アプリケーションは、通知のためにサービスにサブスクライブすることができます。

アイデア??

0 投票する
3 に答える
24292 参照

sql - RAISERRORメソッドでDateTime変数を出力する方法は?

ストアドプロシージャは2つのパラメータを受け入れます@
EffectiveStartDateDATETIME@EffectiveEndDate DATETIME

私は次のように検証コードを書きました:

ここで何が間違っているのかわかりますか。

SProcのコンパイル中に、「CAST()の近くの構文が正しくありません」というメッセージが表示されました。

0 投票する
2 に答える
9936 参照

c# - RAISERROR―SqlExceptionと区別する方法は?

RAISERRORデータベース側の致命的なエラーをアプリケーションに通知するために使用する3〜4個のストアドプロシージャ(必要に応じて変更できます)があります。これらのストアドプロシージャの一部は、C#側から、を使用して実行されますがExecuteNonQuery、その他は。を使用して実行されExecuteReaderます。現時点では、これらのコマンドをtry { ... } catch (SqlException ThisSqlException) { ... }ブロックでラップしていますが、問題は、この例外が、個別に処理する必要がある少なくとも2つのシナリオでスローされることです。

1)接続自体のエラー、またはパラメータの障害やタイプの不一致によるエラー。と

RAISERROR2)明示的に使用するたびに発生するエラー。

RAISERRORこれはWCFアプリケーションであるため、例外の性質(コマンドによるものかどうかに関係なく)に基づいて、クライアントアプリケーションにさまざまなフィードバックを返す必要があります。では、どうすれば両方の状況を区別できますか?

0 投票する
1 に答える
7036 参照

sql-server-2005 - ストアドプロシージャでのIF、RAISERROR、およびRETURN

PROCいくつかのパラメータを受け取るストアドプロシージャがあります。それらの1つ@ID、、がnullでない場合は、特定のストアドプロシージャ、、をPROC_A実行する必要があります。それ以外の場合は、PROC_B実行する必要があります。問題は、両方がを発行する可能性があることRAISERRORです。これは、クライアントアプリケーションに表示されるように、呼び出しスタックを介して伝播したいと思います。ただし、それでもストアドプロシージャRAISERRORの残りの部分が停止することはありません。また、句を使用しているため、チェックもオプションではありません。私の唯一の選択は、ブロックを使用して句をラップし、ブロック内からを再スローすることであるようです。これは、キャッシュして使用する必要があるため、厄介です 。PROCIFIF ( @@ERROR <> 0 ) RETURNTRY...CATCHIFRAISERRORCATCHERROR_MESSAGE()ERROR_SEVERITY()ERROR_STATE()RAISERRORもう一度。

これ以上エレガントな方法はありませんか?

0 投票する
2 に答える
575 参照

sql - INSERT-EXEC シナリオを検出できますか?

INSERT-EXEC現在のストアド プロシージャがステートメントによって呼び出されているかどうかを検出することは可能ですか?

はい、ステートメントを使用したくない場合があることは理解していINSERT-EXECます...それは私が尋ねている質問ではありません。

私が使用してINSERT-EXECいる理由は、同じ SQL を常に書き直すのではなく、ストアド プロシージャの再利用を促進したいからです。

私が気にする理由は次のとおりです。
シナリオの 下では、 aが要求さINSERT-EXECれると元のエラー メッセージが失われます。ROLLBACKそのため、作成されたレコードはすべて孤立します。

例:

0 投票する
2 に答える
1295 参照

c# - SQLServerと競合なしでエラーの種類を処理する方法

SQL Server2008とASP.NETC#を使用しており、計算された行を返すストアドプロシージャがあります。

プロセスを実行する前にパラメータ値を確認したいのですが、パラメータ値が間違っている場合はカスタムエラーメッセージを返したいです。

UI側では、エラータイプに応じて、別のテキストを返し、別のウィンドウを使用する必要があります。例:

  • パラメータ値が間違っている場合のエラー。
  • 未処理のエラー。

私は現在、データベースでこの種のSPを使用していますが、エラーのタイプを識別するために、state引数とseverity引数を使用しようとしました。しかし、パラメータエラーと同じ状態番号を返す未処理のエラーとの競合がいくつかあるため、間違ったウィンドウが表示されます。重大度レベルを使用すると、SPが同じ重大度番号のエラーを返す場合もあると思います。

より良いビューを持つための簡単な例を示します。

C#から:

上記のコードでは、日付は正しいですが、SPにエラーがあったにもかかわらず、プログラムは「内部エラー:…」というメッセージを返しません。

私にはいくつかのアイデアがありますが、あなたの視点とそれを行うための最良の方法を知りたいだけです。

ありがとう。