問題タブ [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.

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

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なしで上記を行うことはできません。

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

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の作成と削除にかかる時間)を取得しました。

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

sql-server - テーブル値パラメーターを異なるデータベース間でストアド プロシージャに渡す

SQL Server 2008を使用しています。

テーブル値パラメーターを、異なるデータベース間で同じサーバーのストアド プロシージャに渡すにはどうすればよいですか?

両方のデータベースで同じテーブル タイプを作成する必要がありますか?

問題に応じて例またはリンクを提供してください。

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

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

sql-server-2008 - robconery / Massive でストアド プロシージャにアクセスしていますか?

Massive ORMに関する Rob による別の素晴らしい記事。私が見つけることができなかったのは、ストアド プロシージャへのアクセス方法に関するリファレンスです。 SubSonicには、ActiveRecords を使用するオーバーヘッドに関するいくつかの問題があったため、SubSonic ORM を引き続き使用して、ストアド プロシージャでデータ アクセスを行うことを好みました。

私がまだ見たことがないのは、ORM での SQL Server の TVP のようなものに対する完全なサポート です

Massive を使用して SQL Server の sproc にアクセスすることは可能ですか。次に、TVP のサポートはありますか?

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

sql - ストアドプロシージャのテーブル値パラメーターでデータを効率的にフィルター処理する

ストアドプロシージャのパラメータとしてテーブル値型があり、最大数千行が含まれています。このストアドプロシージャ(現在はMERGEとINSERT)に対していくつかの操作を実行しますが、それらの前に、述語でパラメーターの内容をフィルター処理します。

これを行う最も効率的な方法は、テーブルタイプの別の変数を宣言し、その変数に挿入してから、その変数を使用してマージして挿入する方法です。

または、@ dataから何かを選択するたびに述語を使用するには:

または、他の何か?

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

c# - 現在のセッショントランザクションをコミットしないことにより、DataTableをパラメータとしてストアドプロシージャに渡す方法は?

私のコードは次のようになります:

コードは正常に機能しますが、トランザクションをコミットしないと、示されているように例外がスローされます

System.InvalidOperationException:コマンドに割り当てられた接続が保留中のローカルトランザクションにある場合、ExecuteNonQueryではコマンドにトランザクションが必要です。コマンドのTransactionプロパティが初期化されていません。

ただし、操作全体を完了する前に、トランザクションをまだコミットしたくありません。どうすればこれを達成できますか?

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

c# - テーブル値パラメーターを受け入れるストアド プロシージャのテーブル引数を生成しています

テーブル値パラメーターを受け取るストアド プロシージャを呼び出しています。

このパラメーターを渡すための次のオプションを知っています: create DataTableDbDataReader、またはIList<SqlDataRecord>

私は使用していますIList<SqlDataRecord>(使用DataTableは似ています)が、大量のボイラープレートコードを書く必要があります:コレクションを作成し、各列のタイプを設定し、行を追加し、各セルの値を設定します。

これはまさに、Entity Framework が自動化することになっているコードの種類だと思います。そのため、SQL TVP 型に一致する C# クラスを定義し、通常の EF 属性を追加し、それらのオブジェクトのコレクションを作成し、EF をコレクションの上に実装DbDataReaderIList<SqlDataRecord>たいと考えました。しかし、私はそれを行う方法を見つけることができません-たとえば、ありますがEntityDataReader、それはSQLから読み取るためのものです-メモリ内コレクションの上に適切なインターフェースを実装する実装は見つかりません。

リフレクションを使用して自分で書き始める前に、何か提案はありますか?

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

object - オブジェクトをSQLServerのストアドプロシージャに渡す(TVPとして)

エンティティ(オブジェクト)と他の依存する子エンティティをストアドプロシージャに渡し、SPがデータベース内のそのエンティティに対応するテーブルを作成/削除/更新するシナリオがあります。

例-エンティティ-人ChildEntity-スキル、JobDetails。

したがって、他のすべてのオブジェクトコレクションを含むPersonオブジェクトを渡すだけで、ストアドプロシージャはそのパラメーターを受け入れ、CRUD操作を再指定します。

オブジェクト全体をDBに渡してから、DB内のオブジェクトで遊ぶことができるオプションはありますか(XMLアプローチを使用したくないので、オブジェクトを単一のエンティティに分割する代わりに、オブジェクト全体を渡したいと思います)

あなたの提案が必要です、ありがとう。

敬具

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

asp.net - Type DataTable(TVP)を.csvまたは.xlsファイルにエクスポートするにはどうすればよいですか?

TVP(Type of DataTable)を.csvファイルまたは.xlsにエクスポートしたいのですが、aspxを使用して.csvにエクスポートしたいです。この質問を手伝ってくれませんか。

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

c# - EF のエラー TVP

SQL 2008で送信および取得値にEF + SPでEF +関数を使用します。

SP:

TVP:

ただし、 SP を EF に追加すると、次のエラーが表示されます。

モデルが生成されましたが、警告またはエラーが発生しました。

詳細については、エラー リストを参照してください。これらの問題は、アプリケーションを実行する前に修正する必要があります。

データベースからのメタデータの読み込みに 00:00:02.5618735 かかりました。

モデルの生成には 00:00:01.2346890 かかりました。