問題タブ [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.
.net - .Net のリフレクションは、ユーザー定義の TypeName を参照して、テーブル値パラメーター/SqlMetaData[] オブジェクトを動的に構築するのに役立ちますか?
バッチ操作のために Sql Server 2k8 でテーブル値パラメーターの使用を開始しました。私はこの機能がとても気に入り、長い間待っていたように感じます.
ただし、.Net コードから TVP を渡すには、SQLMetaData[] を構築し、ループ内で値を埋めるために多大な労力が必要です。
Sql Server でユーザー定義型を保持し、同期の .Net コードで SQLMetaData[] オブジェクトを保持するメンテナンスをどのように回避しますか? SQL で型定義を変更すると、.Net の巨大なコードのどこでその型を使用したかを簡単に知る方法がありません。
.Net Reflection は、プログラマーがユーザー定義型の名前を付けて SQLMetadata を構築するのを助け、オブジェクト配列を提供することでデータを埋めるのに役立ちます。
次の例を検討してください。
テーブルに 100 列ある場合、コードを想像してみてください。
sql-server - Stored Proc のテーブル値パラメーターの欠点は何ですか?
私は、2000、2005、2008、R2、(一部の)デナリなど、さまざまなバージョンの MS SQL Server を使用してきました。ストアド プロシージャのテーブル値パラメーターのような新機能にこれほど興奮したことはありません。私は C# 開発も行っており、TVP を掘り下げています。これを使用して、フロント エンド アプリからのデータベース呼び出しの数を最小限に抑えています。
ここで私の本当の質問は、テーブル値パラメーターを使用することの欠点は何かということです。本当であるにはあまりにも良いです。
あなたの考えを共有してください。さらに、私はそれを使用することに深く入りたくないので、変更する必要があります.
c# - SQL Server 2008 で c# からの複数のデータベース更新を処理する
SQL データベースへの複数の更新を処理する方法を見つけるのが好きです (単一のデータベース往復で)。SQL Server 2008 http://www.codeproject.com/KB/database/TableValueParameters.aspxのテーブル値パラメーターについて読みましたが、これは本当に便利だと思われます。しかし、それを使用するには、ストアド プロシージャとテーブル型の両方を作成する必要があるようです。本当?おそらくセキュリティのためでしょうか?次のように単純にテキストクエリを実行したいと思います。
そう
A) TVP を使用するには、ストアド プロシージャとテーブル タイプの両方を作成する必要がありますか?
B) SQL Server に複数の更新 (および挿入) を送信するために推奨される代替方法は何ですか?
sql-server-2008 - テーブル値パラメーターを使用して複数の行を挿入し、それらの ID を返すにはどうすればよいですか?
私のアプリケーションでは、データベースに挿入する必要がある多数 (100 以上) の行があります。それらがデータベースに挿入されたら、子への外部キー参照を持つ子を挿入する必要があります。
これらすべての行を挿入し、それらの ID をアプリケーションに返すことができるストアド プロシージャを作成する方法があるかどうか疑問に思っています。
c# - EntityFrameworkストアドプロシージャテーブル値パラメーター
テーブル値パラメーターを受け入れるストアドプロシージャを呼び出そうとしています。これはEntityFrameworkで直接サポートされていないことはわかっていますが、私が理解していることから、のExecuteStoreQuery
コマンドを使用してサポートできますObjectContext
。私は次のExecuteStoredProcedure
方法を持っている汎用エンティティフレームワークリポジトリを持っています:
コマンド文字列は次のようになります。
テーブル値パラメーターを受け入れるストアドプロシージャでこのメソッドを実行しようとしましたが、失敗しました。ここで、パラメーターは型である必要がSqlParameter
あり、テーブル値パラメーターはにSqlDbType
設定されている必要があることを読みましたStructured
。だから私はこれをしました、そして私は次のようなエラーを受け取ります:
そのため、SqlParameter.TypeNameをデータベースで作成したユーザー定義型の名前に設定し、クエリを実行すると、次の非常に役立つエラーが発生します。
ADO.NETに戻ってデータリーダーを実行すると、クエリを実行できますが、データコンテキストを使用してクエリを機能させることを望んでいました。
を使用してテーブル値パラメータを渡す方法はありますExecuteStoreQuery
か?また、私は実際にEntity Framework Code Firstを使用しており、メソッドを使用可能にするためににキャストしDbContext
ています。これは必要ですか、それとも私もこれを行うことができますか?ObjectContext
ExecuteStoreQuery
DbContext
vb.net - ADO.Net テーブル値パラメーター (TVP): オペランド型の衝突: datetime2 は int と互換性がありません
私は TVP を使用しており、データ テーブルを TVP としてストアド プロシージャに渡そうとしています。コマンドが を実行しようとするとExecuteNonQuery()
、エラーがスローされます。
オペランド タイプの衝突: datetime2 は int と互換性がありません。テーブル値パラメーター "@tvpPermitWork" のデータは、パラメーターのテーブル型に準拠していません。
ビジュアライザーを使用してデータ テーブルを確認したところ、すべてのデータが正しいことがわかりました。私は今行き詰まっており、個々のパラメーターを持つストアド プロシージャに変更する時間がありません。
これを修正する方法についての提案は大歓迎です。
c# - 空のテーブルで重複キーエラーが発生するMergeステートメントにテーブル値パラメーターがどのように渡されますか?
テーブル値パラメーターをC#コードからMS SQL Server2008R2ストアドプロシージャに送信しています。受け取ったエラーは次のとおりです。「PRIMARYKEY制約'PK_Example.ExampleTable'の違反。オブジェクト'Example.ExampleTable'に重複するキーを挿入できません。ステートメントは終了しました。」
テーブル構造:Example.ExampleTable
- PKが唯一の制約です。
ストアドプロシージャ:
上記のIDLIST部分について:CREATE TYPE IDLIST AS TABLE (n int);
C#コード:
実行時にエラーが発生します。セットの例では、変数は次のとおりです。年:2011月:11チェックステータス:1 iDsList :( 71個の一意の整数のリスト)
私の機能の目的は、誰かがグリッド上の「すべてチェック」をクリックし、チェックされたステータスをデータベース内の影響を受ける各行に、各行を経由せずに保存することです。これは正規化によって作成された補助テーブルであるため、それぞれにレコードがある場合とない場合があります。したがって、マージされます。エラーが発生し、テーブルを切り捨てて再試行することで問題を単純化することにしましたが、テーブルが完全に空の場合でも、「キーの重複」エラーが発生します。
したがって、中心的な問題は、レコードのない重複キーエラーを発生させる方法と、エラーが発生しないように修正するにはどうすればよいかということです。
sql-server-2008 - テーブル値パラメーターを使用して CLR ストアド プロシージャ内からストアド プロシージャを呼び出す
状況:
データ テーブルを作成し、TVP パラメーターを使用して SQL ストアド プロシージャを呼び出そうとする 1 つの Clr ストアド プロシージャ。
コード:
................................................................... ...................................
問題:
動作が不安定です。一度動作すると、x (x はランダム) が呼び出された後、y (y はランダム) に「重大なエラーが発生しました」という詳細が表示され、その後、サイクルが再び開始されます。エラーが発生し始めると、エラーが同じままであるため、SQL SPが変更され、障害が発生する可能性があるため、問題はCLR SP側にあります。CLR SP と TVP の間に愛着がないのかもしれませんが、それに関する言及は見つかりませんでした。
補足として、動作する場合は長時間動作する可能性がありますが、SP プランを削除すると、障害が発生し始めます。(その「トリガー」にもロジックが見つかりません)
何かご意見は ?前もって感謝します。
sql-server-2008 - テーブル 値 パラメータ 読み取り専用 回避策
@section
タイプのテーブル値パラメーターを持つ SProc がありdbo.SectionIn
ます。このパラメーターは SProc 全体で使用されており、そこからいくつかのレコードを削除したいと考えていますが、もちろん設計上は読み取り専用です。
私の計画は、その内容をテーブル変数にコピーして、代わりに使用することです。
私の質問は、これによりクエリ プランでパフォーマンス ヒットが発生するかどうかです。そうでない場合、そもそも ReadOnly 要件の背後にある理由は何ですか?
c# - DataContext で接続を手動で開くときに従うべきパターン
Linq2Sql は、ストアド プロシージャのテーブル値パラメーターをサポートしていません ( 1、2 )。
このため、DataContext にテーブル値パラメーターの醜いサポートを追加しています (一貫性を保ち、同じデータ コンテキスト内からプロシージャを呼び出すことができるようにするためです)。
を呼び出しthis.Connection.CreateCommand()
、にキャストしSqlCommand
(SqlCommand
いずれにせよ TVP をサポートするため)、それらを含むすべてのパラメーターを手動でリストしSqlDbType.Structured
ますExecuteNonQuery
。
これはうまくいきます。
しかし。
ヘルパー メソッド内では、コンテキスト接続が閉じている可能性があるため、コンテキスト接続を開く必要があります。接続を手動で開いたので、手動で閉じる必要がありますか?
私はこれら
を経験しました:Linqを使用している場合、SQL接続を手動で閉じる必要がありますか? DataContext を使用する場合、いつデータベースへの接続が開始されますか
?
しかし、彼らは実際には私の質問に答えません。結果が列挙されると接続が閉じられることは理解していますが、それよりも複雑です。メソッドの呼び出しは、結果の列挙とは異なり、読み取り専用操作ではありません。
さらに、アンビエント トランザクションがある場合DataContext
、最初のメソッド呼び出しの後に接続を確実に閉じません。
このため、接続に関して何をするのが正しいのかわかりません。
接続を開いてDataContext
その有効期間を管理したままにするだけですか、それとも従うべきパターンがありますか?
編集:
実験では、開いたままにしておくと正常に動作し、アンビエント トランザクションがあればそれを自動的に尊重することが示されています。しかし、私はそれについてしっかりしたアドバイスをしたいと思います。