問題タブ [context-info]

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 投票する
2 に答える
21873 参照

sql-server - SQL ServerのCONTEXT_INFOのスコープは何ですか?

CONTEXT_INFOを使用して、監査/履歴テーブルの目的で削除トリガーにユーザー名を渡します。CONTEXT_INFOの範囲と、潜在的な競合状態を作成しているかどうかを理解しようとしています。

私の各データベーステーブルには、削除を処理するためのストアドプロシージャがあります。ストアドプロシージャの削除は、userIdをパラメーターとして受け取り、CONTEXT_INFOをuserIdに設定します。次に、削除トリガーがCONTEXT_INFOを取得し、それを使用して、行を削除したユーザーを示す監査テーブルを更新します。

問題は、異なるユーザーからの2つの削除sprocが同時に実行されている場合、一方のsprocに設定されたCONTEXT_INFOは、もう一方のsprocによって起動されたトリガーによって消費される可能性があるかどうかです。

この記事http://msdn.microsoft.com/en-us/library/ms189252.aspxを見たことがありますが、この記事が役立つための鍵となるSQLServerのセッションとバッチの範囲がわかりません。

コードを投稿したいのですが、現時点では時間が足りません。これが十分に明確でない場合は、後で編集します。

助けてくれてありがとう。

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

sql-server - context_info が失敗するのはなぜですか?

context_info を使用してグローバル変数をシミュレートしています。このコンテキストで使用します。

いくつかのバッチで構成されたスクリプトがあり、最初にグローバル変数を設定し (123例では)、すべてのバッチの後でその番号を使用してログ テーブルに入力します。

これで動作しますが、今日は 1 台のマシンで失敗しました。理由がわかりません。context_info が機能しない理由はありますか? 手動で置き換えようとしましcontext_info123が、スクリプトは成功しました。スクリプトは、Delphi アプリケーションから実行されました。

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

sql-server - SQLServer 2008 R2でCONTEXT_INFOの128バイトの制限を増やすにはどうすればよいですか?

アリの文脈空間のようなものです!

0 投票する
4 に答える
4509 参照

sql-server - CONTEXT_INFO を varchar にキャストし、結果の長さ

CONTEXT_INFOテーブル監査の目的で、ユーザーコードをストアドプロシージャから DELETE トリガーに渡すために使用しようとしています。

すべて正常に動作しますが、監査テーブルに保存されているユーザーコードの長さが正しくないことに気付きました。

このスクリプトを例にとると...

結果:

長さ (@userCode) = 8

長さ (@temp_userCode) = 50

変数の長さが 50 に戻ってくるのはなぜ@temp_userCodeですか? また、正しく格納するために元の長さに戻すにはどうすればよいですか?

さらに詳しい情報:

SQL Server 2005 を実行していますが、ソリューションは 2005 以降のすべてのバージョンで動作する必要があります。

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

sql-server-2008 - Context_Info SQL Azure の置き換え

現在、Master データベースの CONTEXT_INFO プロパティを使用して、ログインしたユーザー名を保存し、後でテーブル トリガーで監査用に使用しています。

SQL Azure への移行中に、クロスデータベース接続の問題が発生し、この問題に対する直接的な解決策を見つけることができませんでした。

問題の詳細は次のとおりです。

  1. データ アクセス レイヤーからストアド プロシージャ XXX を呼び出し、ユーザー名をパラメーターとして渡します。
  2. ユーザー名は、XXX の CONTEXT_INFO 値を設定するために使用されます。
  3. CONTEXT_INFO 値は、テーブルの挿入/更新/削除トリガーで使用され、アプリケーション監査用のユーザー名を格納します。

これまでに見つけた解決策:

  1. CONTEXT_INFOとして機能するテーブルをデータベースに作成
  2. データ アクセス レイヤーで 2 つの接続文字列を使用します。1 つはマスター データベース用 (CONTEXT_INFO を設定するため)、もう 1 つはアプリケーション用であり、アプリケーションへの接続を開く前に毎回 SET CONTEXT_INFO を実行します。

しかし、将来的に複数の SQL Azure データベースにデータベースを拡張する場合は特に、どちらのソリューションも危険だと思います。

あなたの支援に感謝。

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

sql-server-2008 - SQL Server トリガーで Web セッション情報をキャプチャする

Web アプリケーションからテーブル行への変更を監査するトリガーを作成しました。私の Web アプリケーションは、単一の db ユーザーを使用してデータベースの更新を行っています。ただし、多くの異なるユーザーが Web サイトにログインして、更新と挿入を行うことができます。したがって、db ユーザーは常に同じですが、Web ユーザーは異なります。

行を変更しているWebサイトにログインしているユーザーをキャプチャして、変更を行っているWebユーザーと一緒に変更を監査できるようにしたいと考えています。

誰が変更を行っているかを知るために、SQLトリガーでWebセッションをキャプチャする方法を教えてください。セッション情報が SQL Server トリガーにも渡されるように web.config ファイルを構成できますか、または他の方法がある場合はお知らせください。

よろしく

アリフ

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

tsql - バイナリフィールドから数値を保存および抽出する方法は?

テーブルに対して INSERT/DELETE 操作を実行するプロシージャと、2 番目のテーブルの変更をログに記録するトリガーがあります。

必要なのは、変更を行ったユーザーを記録するために、プロシージャ コールをインスタンス化したセキュリティ ユーザー ID をトリガーに渡すことです。

これを行う唯一の方法は、SET CONTEXT_INFOCONTEXT_INFO()を使用することです。

問題は、番号 (ユーザー ID) を抽出できないことです。たとえば、次のコードです。

0 を返します。

0 投票する
0 に答える
75 参照

sql-server - CONTEX_INFO SQL サーバーの使用

PRINT @username は正しい値を返すため、context_info を正しく設定していますが、2 回目の印刷で空の行が表示されます。上記の where 句に @username の代わりに値を入力すると、正しい値も出力されます。私は何が欠けていますか?

CONTEXT_INFO を削除したところ、出力が正しくなりました。したがって、CONTEXT_INFO と関係がある必要があります。

0 投票する
0 に答える
510 参照

sql-server - SQL Server プロファイラーで CONTEXT_INFO を追跡する方法は?

SQL Server 2008 R2 を使用しています。現在のセッションのコンテキスト情報を設定した場合、SQL Server プロファイラーでそれを追跡するにはどうすればよいですか? SQL Server プロファイラーのどの列にコンテキスト情報の値が表示されますか?

たとえば、ストアド プロシージャで、次のようにコンテキスト情報を 'dev_support' に設定するとします。

SQL Server プロファイルで値 'dev_support' を確認するにはどうすればよいですか?

ありがとう

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

sql-server - SQL Server、CONTEXT_INFO()、および varchar サイズ

テーブルには datatypeusersの列があります。テーブルにはレコードがありません。ユーザー名に新しいレコードを挿入します。以下は私が期待するものを返します:usernamevarchar(50)A

ここまでは順調ですね。

次に、次の値を使用して、別のテーブルのトリガーからテーブル users を更新しますCONTEXT_INFO()

some_other_tableI doのトリガーで:

ユーザー名は正しく「B」に設定されていますが、次の例では 50 が返されます。

コンテキストを入力するときの解決策は、次のことです。

しかし、なぜこれを行う必要があるのでしょうか。

をスペースで埋めない場合CONTEXT_INFO、その値を使用して更新すると、結果の長さが 50 になります (更新前の 1 文字の値ltrimであっても)。rtrim

CONTEXT_INFOまた、128 バイトではなく、合計 127 バイトにパディングする必要があるのはなぜですか? 127 を超える文字ごとに、最初に設定された値から 1 文字が切り捨てられます。CONTEXT_INFO

注: ANSI_PADDING が有効になっています