問題タブ [table-variable]
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.
sql - T-SQLでは、サブクエリでテーブル変数を参照する方法は?
テーブル変数 '@t' を宣言し、'INSERT-INTO-SELECT' を正しく実行しました。グループごとの行番号付けのために追加の計算を使用してテーブル変数をクエリしようとしたときに、「@t」を直接使用すると「変数を宣言する必要があります」、または「@t」のエイリアスを使用すると「無効なオブジェクト名」というエラーが発生しました'。ご教授ください。
sql-server-2008 - MS SQL Serverでは、テーブル変数への行の挿入が突然非常に遅くなりました
MS SQL Server 2008では、テーブル変数への行の挿入が突然非常に遅くなりました。テーブル変数とクエリおよび挿入行の作成はsprocで行われ、非常に遅くなっています。
クエリは事実上瞬時に完了し、小さなセット(intの1列の10行)を返し、テーブル変数に挿入するのに50秒以上かかります。一時テーブルに戻しましたが、それで問題ありません。操作は数マイクロ秒で行われます。
sql - 動的SQLステートメントでテーブル変数を使用するには?
ストアド プロシージャでは、プロシージャの上に 2 つのテーブル変数を宣言しました。現在、動的SQLステートメント内でそのテーブル変数を使用しようとしていますが、そのプロシージャの実行時にこのエラーが発生します。SQL Server 2008 を使用しています。
これは私のクエリがどのように見えるかです、
そして、次のエラーが表示されます。
テーブル変数「@RelPro」を宣言する必要があります。テーブル変数「@TSku」を宣言する必要があります。
動的クエリの文字列ブロックの外にあるテーブルを取得しようとしましたが、役に立ちませんでした。
performance - CTE (Common Table Expression) と一時テーブルまたはテーブル変数のどちらが速いですか?
CTE
(共通テーブル式) と、どちらが速いですかTemp tables
?Table variables
sql - SQL-Server でテーブル変数を削除するにはどうすればよいですか? これを行う必要がありますか?
スクリプトにテーブル変数があります (ストアド プロシージャではありません)。2 つの質問:
- テーブル変数を削除するにはどうすればよいですか? テーブルの @varName をドロップすると、「snytax が正しくありません」というエラーが発生します。
- 私は常にこれを行う必要がありますか?良い習慣だと聞きます。このような小さなスクリプトに本当に必要ですか?
これが私のコードです:
sql-server - 一時テーブルまたはテーブル変数への動的クエリの結果
sp_executesql を使用して結果セットを生成するストアド プロシージャがあります。結果の列数はさまざまですが、Col1 Col2 Col3 などの形式になります。
結果を一時テーブルまたはテーブル変数に取得して、作業できるようにする必要があります。問題は、コマンドの実行後に一時テーブルのスコープが失われるため、sp_executesql を使用して動的に行うことができない一時テーブルの列を定義する必要があることです。
グローバル一時テーブルを動的に作成できるようにするため、グローバル一時テーブルを使用するというアイデアをいじりましたが、このプロセスの同時実行によってグローバル一時テーブルが更新される可能性が非常に高くなります。
何か案は?
sql-server - テーブル変数の奇妙なSQLServer遅延読み込み?
SQL Server 2008で誤解を招くエラーに遭遇しましたが、私に何が起こっているのかを誰かが説明できるでしょうか。
私は次のようなストアドプロシージャを持っています:
実際のストアドプロシージャはもっと複雑ですが、これが要点です。
SPを実行すると、「文字列またはバイナリデータが切り捨てられる」というエラーが発生する前に、大量の出力行が表示されます。エラー内の特定の行参照は、上記のメインSELECTステートメントのどこかを指していますが、しばらくデバッグした後、最初に相互参照に入力した値が大きすぎることがわかり、それで修正されました。
しかし、私の質問は次のとおりです。
SQL Serverは、相互参照行の挿入を完了せずに、メインのSELECTステートメントをどのように実行しましたか?ある種の遅延処理はありますか?テーブル変数の遅延読み込み?
いったいなぜ「文字列またはバイナリデータが切り捨てられる」というメッセージが実際に発生している場所を指していないのでしょうか。それとも私はそれを間違っていますか?
ありがとう、レイ
編集
これは、テーブル変数へのLEFT JOINと関係があり、その列はいずれもWHERE句に含まれていないと思います。SQL Serverは、必要になるまで(INNER JOINが完了した後)テーブルの準備を残しているようで、その時点で、結果セットの大部分をSELECTの準備ができているときにエラーが発生しました。
@cross_referenceに正常に挿入された値が、返される結果セットに表示されることにも気づきました。大きすぎるために挿入に失敗した行はNULLを表示するだけです。
tsql - テーブル変数の削除のパフォーマンスを向上させる
t-sql の通常のテーブルでの削除のパフォーマンス調整を見てきました。
しかし、テーブル変数の削除に関するパフォーマンスの微調整はありますか?
編集
例を次に示します。UserExclusionsEvaluate は実際には CTE であるため、プロットはより厚くなりますが、最初にテーブル変数を中心に最適化を試みます (可能であれば)。CTE 自体は非常に高速に実行されます。削除が遅いだけです。
現在の化身では、 @UsersCriteria は次のとおりです。
@UsersCriteria を非プライマリとして試し、クラスター化された非クラスター化で実験しました。
また、IN に問題がある可能性もあります。サブクエリでJOINも試しました。
編集:
グッドニュース! suquery をチェーンされた CTE に移動したり、テーブル ヒントを試したりするなど、SQL でたくさん遊んだ後。
テーブル変数から一時テーブルに変更するだけで、パフォーマンスが劇的に向上しました。
これは非常に興味深いことです。削除は単独で正常に実行され、(CTE の) サブクエリは単独で正常に実行されました。しかし、2つを混合すると非常に遅くなりました。
サブクエリで CTE を使用すると、オプティマイザが起動できないのではないでしょうか? たぶん、削除と混合したとき。
sql - IN(NULL)が機能しないSQLServerのクエリ
「ユーザー定義のテーブルタイプ」を定義すると、次のようになります。
このテーブル変数に0とnullを配置します。次に、このクエリを実行します。
取得しitem=0
ないだけですitem is null
簡単に言えば:SELECT something FROM theTable WHERE item IN (0, NULL)
動作していません(エラーはありませんが)SELECT something FROM theTable WHERE item=0 OR item IS NULL
したがって、私の質問は、ユーザー定義のテーブルタイプを使用したいが、NULL値も使用する必要があるかどうかです。クエリを正しく実行して、nullアイテムを含む結果を取得するにはどうすればよいですか。
ありがとう(ところで、私はMS SQL Server 2008 R2を使用しています)