問題タブ [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.
tsql - レコードを挿入する前にTVPを繰り返しますか?
次のsprocの作成についてサポートが必要です。
2つの整数値(@ID1と@ID2)とデータテーブル/TVPを受け入れるSQLServer2008sprocがあります。
TVPテーブルには、いくつかのフィールドが含まれています。タイトルと説明。
TVPテーブルを反復処理して、タイトルまたは説明がデータテーブルtbl_Itemsにすでに存在するかどうかを確認します。ここで、@ ID1=tbl_Items.ID1および@ID2=tbl_Items.ID2です。
どちらも存在しない場合は、@ ID1とID2の値、およびそのTVP行をtbl_Itemsに挿入します。
ありがとう。
.net - テキスト コマンドのテーブル値パラメーターを作成する方法
テーブル値パラメーターを入力として受け取る SQL クエリの生成ブロックがあります。
DataTable data
入力パラメータがある場合:
問題は、コマンドがストアド プロシージャでない場合、TypeName
宣言する必要があることです。
パラメーター内の列の数と型はdata
大きく異なる可能性があるため、使用できる SQL 型がありません。
このように TVP を使用する方法はありますか?
.net - テーブル値パラメーターのパフォーマンスに関する問題
これが私の使用方法の問題なのか、Microsoft の実装の問題なのかはわかりませんが、SQL 2008 のテーブル値パラメーターは非常に遅いです。
一般に、TVP を使用する必要がある場合、それは大量のレコードを持っているためです。現在、最も少ないレコード以外では使用できないほど遅いようです。
私は次のように.Netでそれらを呼び出しています:
理由を確認するためにプロファイラーを実行したところ、実際の SQL ステートメントは次のようになります。
しかし、それは本当に遅い方法です。代わりにこれを行うと、はるかに高速になります。
より新しい、はるかに高速な構文を使用しない理由がわかりません。または、ボンネットの下で行うことは何でもSqlBulkCopy
。
新しい構文は SQL 2008 で追加されましたが、TVP も同様です (私はそう思います)。
これを行うためのオプションはありますか?それとも私が行方不明ですか?
ado.net - 構造化パラメーターを使用したコマンドの準備
このADO.NETコマンドオブジェクトがあり、いくつかのパラメーターを設定して正常に実行できます。
_mergecommand.Parameters.Add(new SqlParameter( "values"、SqlDbType.Structured)); _mergecommand.Parameters["values"]。TypeName="strlist"; _mergecommand.Parameters["values"]。Direction=ParameterDirection.Input;
_mergecommand.Parameters["values"]。Value=valuelist; _mergecommand.ExecuteNonQuery();
これは正常に機能します。しかし、これを何百万回も実行する必要があるため、実行する前にこのコマンドを準備したいと思います。SQL Server 2008を使用しています。準備しようとすると、このエラーが発生します。
SqlCommand.Prepareメソッドでは、すべての可変長パラメーターにゼロ以外のサイズを明示的に設定する必要があります。
これを行う方法はありますか?
table-valued-parameters - テーブル値パラメーターを PetaPoco を使用してストアド プロシージャに渡すことはできますか?
いくつかのストアド プロシージャを含むプロジェクトに PetaPoco を使用しようとしています。それらのほとんどは正常に動作しますが、ストアド プロシージャがユーザー定義テーブル タイプである IntList を予期している場合がいくつかあります。
私はこれを行う方法を見つけていません。明らかな何かが欠けていることを願っています。私が持っている現在の回避策は、ストアド プロシージャ コードを SQL から文字列にコピーし、それを PetaPoco データベースに対して実行することです。
sql - @table変数または#tempテーブル:パフォーマンス
を持っている大きなユーザー定義のテーブル型変数があり129 Columns
ます。
一度2000-3000 Records
にこの変数に格納し、これをさまざまなストアドプロシージャと関数に渡して、追加のデータを取得し、同じタイプの新しい変数に変更を加えて、この新しい変数をソースSPに返します(これは、テーブルタイプが原因です)パラメータはREADONLY
)としてのみ渡すことができます。
これが私のアルゴリズムです。
どちらを使うべき@table varible
か#temp table
.net - .NET API による高速ストレージ/検索を可能にするリアルタイム データの格納に関する推奨事項
現在開発中ですが、機能しているソリューションで SQL データベースを本質的に置き換えるための最良のソリューションを見つけようとしています。データ ストアには、バックアップおよび/またはロール イン/アウトが可能なテーブル パーティショニングとファイル グループを含める必要があります (IBM DB2 パーティショニングで説明されているように: http://www.ibm.com/developerworks/data/library/ techarticle/dm-0605ahuja2/index.html )、大量の行の挿入/更新も許可します。
現在、SQL データベースに格納されているテーブルの構造は単純です。 ID long (PRIMARY KEY) TimeStamp DateTime (PRIMARY KEY) Value float Attribute int
ID は現在のデータベースの ID とは関係ありませんが、別の場所から取得されます。ID とタイムスタンプは一緒に挿入/更新の主キーとして使用されます
テーブル内のデータ。現在、テーブル値パラメーターを持つストアド プロシージャを .NET から使用して、一度に 50K 行のデータをテーブルにマージできるようにしています。現在、開発マシンで 1 秒あたり約 10,000 エントリを測定しましたが、これには満足しています。ただし、このソリューションはコストに敏感であり、テーブルが大きくなるにつれてパフォーマンスが要求されるため、テーブルのパーティショニング (TimeStamp フィールドの範囲) を実行し、パーティションを複数のファイルに分割してメンテナンス/バックアップを簡素化する機能が必要です。さらに、顧客が少なくとも ODBC を介してデータに対してクエリ (読み取り専用) を実行できる必要があります。
私はいくつかの NoSQL オプション、mySQL、および DB2 を見てきました (現在のところ、これが最も適しているようです)。何が最適かについて、誰かが持っている洞察をいただければ幸いです。もちろん、「パーティショニング」ロジックをコードに移動するオプションは常にありますが、可能であればそれは避けたいと思います。
sql - ストアド プロシージャでのテーブル値パラメーターの列の使用 -
2 つのフィールド ( adatetime
および a varchar(3)
) を持つ TVP をストアド プロシージャに渡しています。テーブルの datetime 列が TVP の datetime の 1 つまたは最大で 2 つに等しいすべてのテーブル行を返そうとしています。数分前に(重複は気にしませんが、ないほうがいいです)。
これは私が思いついたものです - 現在非常に遅く (~5 秒!)、改善するために何をすべきかわかりません。テーブルにインデックスを付けますか? どの列?AtTime
?
行を照合する前に検索する範囲を計算する必要があるため、面倒なクエリであることはわかっています。まったく異なるがこれを行うための望ましい方法があれば教えてください。さらに、入力 TVP には約 300 行があり、テーブル自体には 200k 以上あるため、照合して検索するデータが大量にあります。
編集クエリが思いどおりにならないことに気付きました-2分の範囲内でtvp行ごとに最新の一致するテーブルの日付/価格行in
を返したいのですが、現時点では、そのセットで一致するすべてのものを取得します. 使用してみましたが、可能な一致が 1 つに制限されるため、スクエア 1 に戻ります。between
MAX(AtTime)
sql - ADO.NetおよびSPでの複数の挿入
ado.netから複数のレコードを挿入する必要があります。更新のためにSPを呼び出す必要があります。CSVとして複数のレコードがあり、SPの一時テーブルに追加しました。いくつかの検証を行う必要があります。そして、それはメインテーブルに挿入/更新されます。
問題は、Tempテーブルの使用にパフォーマンスボトルネックがあることです。
私はそれをググった。複数のレコードを渡す他の方法は、SQL2008のXMLまたはテーブル値パラメーターを使用して実行できます。
パフォーマンスの観点から、どちらが優れているか。私の場合、一度に500の同時トランザクションが発生する可能性があります。
提案してください。
よろしく、Mani.M
sql - SQL ストアド プロシージャ - パラメータを内部的に使用する
2 つのパラメーターを渡すストアド プロシージャがあります。1 つのパラメーターはテーブル値パラメーターで、もう 1 つは nvarchar です。ストアド プロシージャは次のとおりです。
コードから、DataTable を @P1 として渡し、値の文字列を @P2 として次のように渡します。"'Value1', 'Value2', 'Value3', 'Value4'"
私に問題を引き起こしているのは @P2 です。テーブルタイプは正常に機能します。通常、ストアド プロシージャでこのようなパラメーターを使用する場合、内部で文字列を作成し、文字列をパラメーターでフォーマットしてから、sp_executeSql を呼び出してクエリを実行します。ただし、テーブル値パラメーターを使用する場合、これは機能しません。
このように nvarchar とともにテーブル値パラメーターを操作する方法を知っている人はいますか? これを正しくフォーマットしようとすると、単純なものが欠けていると確信しています。ありがとう、
-スコット