問題タブ [table-valued-parameters]
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.
parameters - 定義済みのテーブル構造を持たないテーブル値パラメーターを作成する方法
プログラム内で構築されたデータテーブルから新しい SQL テーブルを作成したいと考えています。テーブル全体を MSSQL にコピーしたいだけです。私の調査から、答えのように見えるものを見つけました:
補足として、SQL 2008 では、クライアント定義の Datatable からテーブルを作成する非常に簡単な方法があります。DataTable をテーブル値パラメーターとして渡し、次に SELECT * INTO FROM @tvp を発行します。これにより、定義が効果的に転送されます。 Datatable とそのコンテンツ データを SQL の実際のテーブルに変換します。
(この質問の下で Remus Rusan が投稿 --- C# データテーブルから SQL Server テーブルを作成する)
私が理解できないのは、テーブル定義なしで SQL サーバーでテーブル値パラメーターを定義する方法です。すべてのドキュメントは@tvp
、もちろんの目的を無効にする列定義で を定義することを示していSELECT * INTO
ます。私が何かを完全に見逃していない限り、SQLサーバー側の宣言@tvp
とSQLステートメントを呼び出す短いspなしで上記を行うことはできません。
sql-server-2008 - テーブルの挿入速度が遅くなり、テーブルのサイズが大きくなります
一部のデータを解析し、.NETから3つのテーブルに挿入します。一部の挿入は600,000行であるため、テーブル値パラメーターを使用してデータを渡します。オブジェクト(DataTablesではなく)を渡すと、それらは参照によって渡されます(TVPの性質)。挿入値は一度に1000行に制限されているため、ストレート値の挿入に対して100:1のゲインが得られました。ストアドプロシージャでは、TVPから実際のテーブルへの挿入は、クラスター化インデックスによってソートされます。これらのテーブルには、クラスター化されたインデックス以外のインデックスはありません。SPはTABLOCKを取ります。これは、これらが1回の書き込みテーブルと1つのデータローダーであるためです。フィルファクター100。データまたはトランザクションログのサイズは増加しません。データの総負荷に合わせたサイズになります。最後に質問に。過去4時間で、2億行が挿入されました。挿入応答時間は1/2に短縮されました。曲線因子が100で、クラスター化されたインデックスで並べ替えて挿入している場合、応答が低下するのはなぜですか?これを修正するにはどうすればよいですか?
私はそれを使用するまでTVPを取得しませんでした-それは逆DataReaderのようなものです。
ご協力いただきありがとうございます。問題の説明が間違っていることをお詫び申し上げます。解析ごとに(この場合は200,000を解析しています)、挿入はクラスター化されたインデックスによってソートされます。ただし、3つのテーブルのうち1つだけが、クラスター化されたインデックス順に全体として次の解析になります。70,000を解析した後、良好なテーブルのスキャン密度は99%ですが、他の2つのテーブルはスキャン密度が12%でひどく断片化されています。
2つのフラグメント化されたテーブルにフィルファクターを50に設定し、インデックスを再作成します。今、私は最高速度の約1/3を得ています。プロセスを停止し、数時間ごとにインデックスを再作成する必要があります。
私がやったことは、挿入順序に一致するようにクラスター化されたインデックスを変更することです。以前はクラスター化されていたものに固有のインデックスを作成しました。一意のインデックスを無効にし、データをインデックスに挿入してから、一意のインデックスを再構築します。そのシナリオでは、10時間の実行で300:1のパフォーマンスが得られます。それは余分な0ではありません-300対1。そして、それは混乱ではありません-順序付けられたインデックスとフィルファクターまたは30から始める場合と比較して。追加のインデックスを使用しても、両方のフィルファクターを100にすることができるため、テーブルサイズは小さくなります。
一部のクエリで#tempを使用しているので、クエリでのみ認識されている順序で行を取得できます。#tempをTVPに変換し、1/2秒(#tempの作成と削除にかかる時間)を取得しました。
sql-server - テーブル値パラメーターを異なるデータベース間でストアド プロシージャに渡す
SQL Server 2008を使用しています。
テーブル値パラメーターを、異なるデータベース間で同じサーバーのストアド プロシージャに渡すにはどうすればよいですか?
両方のデータベースで同じテーブル タイプを作成する必要がありますか?
問題に応じて例またはリンクを提供してください。
助けてくれてありがとう。
sql-server-2008 - robconery / Massive でストアド プロシージャにアクセスしていますか?
Massive ORMに関する Rob による別の素晴らしい記事。私が見つけることができなかったのは、ストアド プロシージャへのアクセス方法に関するリファレンスです。 SubSonicには、ActiveRecords を使用するオーバーヘッドに関するいくつかの問題があったため、SubSonic ORM を引き続き使用して、ストアド プロシージャでデータ アクセスを行うことを好みました。
私がまだ見たことがないのは、ORM での SQL Server の TVP のようなものに対する完全なサポート です。
Massive を使用して SQL Server の sproc にアクセスすることは可能ですか。次に、TVP のサポートはありますか?
sql - ストアドプロシージャのテーブル値パラメーターでデータを効率的にフィルター処理する
ストアドプロシージャのパラメータとしてテーブル値型があり、最大数千行が含まれています。このストアドプロシージャ(現在はMERGEとINSERT)に対していくつかの操作を実行しますが、それらの前に、述語でパラメーターの内容をフィルター処理します。
これを行う最も効率的な方法は、テーブルタイプの別の変数を宣言し、その変数に挿入してから、その変数を使用してマージして挿入する方法です。
または、@ dataから何かを選択するたびに述語を使用するには:
または、他の何か?
c# - 現在のセッショントランザクションをコミットしないことにより、DataTableをパラメータとしてストアドプロシージャに渡す方法は?
私のコードは次のようになります:
コードは正常に機能しますが、トランザクションをコミットしないと、示されているように例外がスローされます
System.InvalidOperationException:コマンドに割り当てられた接続が保留中のローカルトランザクションにある場合、ExecuteNonQueryではコマンドにトランザクションが必要です。コマンドのTransactionプロパティが初期化されていません。
ただし、操作全体を完了する前に、トランザクションをまだコミットしたくありません。どうすればこれを達成できますか?
c# - テーブル値パラメーターを受け入れるストアド プロシージャのテーブル引数を生成しています
テーブル値パラメーターを受け取るストアド プロシージャを呼び出しています。
このパラメーターを渡すための次のオプションを知っています: create DataTable
、DbDataReader
、またはIList<SqlDataRecord>
。
私は使用していますIList<SqlDataRecord>
(使用DataTable
は似ています)が、大量のボイラープレートコードを書く必要があります:コレクションを作成し、各列のタイプを設定し、行を追加し、各セルの値を設定します。
これはまさに、Entity Framework が自動化することになっているコードの種類だと思います。そのため、SQL TVP 型に一致する C# クラスを定義し、通常の EF 属性を追加し、それらのオブジェクトのコレクションを作成し、EF をコレクションの上に実装DbDataReader
しIList<SqlDataRecord>
たいと考えました。しかし、私はそれを行う方法を見つけることができません-たとえば、ありますがEntityDataReader
、それはSQLから読み取るためのものです-メモリ内コレクションの上に適切なインターフェースを実装する実装は見つかりません。
リフレクションを使用して自分で書き始める前に、何か提案はありますか?
object - オブジェクトをSQLServerのストアドプロシージャに渡す(TVPとして)
エンティティ(オブジェクト)と他の依存する子エンティティをストアドプロシージャに渡し、SPがデータベース内のそのエンティティに対応するテーブルを作成/削除/更新するシナリオがあります。
例-エンティティ-人ChildEntity-スキル、JobDetails。
したがって、他のすべてのオブジェクトコレクションを含むPersonオブジェクトを渡すだけで、ストアドプロシージャはそのパラメーターを受け入れ、CRUD操作を再指定します。
オブジェクト全体をDBに渡してから、DB内のオブジェクトで遊ぶことができるオプションはありますか(XMLアプローチを使用したくないので、オブジェクトを単一のエンティティに分割する代わりに、オブジェクト全体を渡したいと思います)
あなたの提案が必要です、ありがとう。
敬具
asp.net - Type DataTable(TVP)を.csvまたは.xlsファイルにエクスポートするにはどうすればよいですか?
TVP(Type of DataTable)を.csvファイルまたは.xlsにエクスポートしたいのですが、aspxを使用して.csvにエクスポートしたいです。この質問を手伝ってくれませんか。
c# - EF のエラー TVP
SQL 2008で送信および取得値にEF + SPでEF +関数を使用します。
SP:
TVP:
ただし、 SP を EF に追加すると、次のエラーが表示されます。
モデルが生成されましたが、警告またはエラーが発生しました。
詳細については、エラー リストを参照してください。これらの問題は、アプリケーションを実行する前に修正する必要があります。
データベースからのメタデータの読み込みに 00:00:02.5618735 かかりました。
モデルの生成には 00:00:01.2346890 かかりました。