問題タブ [insert-update]

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 投票する
1 に答える
2335 参照

c# - データベースへのデータの挿入に関する ADO.NET Entity Data Model の問題 (Baza.mdf) / Visual Studio / C#

へろ。まず、私の英語で申し訳ありません。Visual Studio 2008 で C# で Windows フォーム アプリケーションを作成しています。データベース (Baza.mdf) または「サービス ベースのデータベース」を作成しました。これは、WindowsForm アプリで .mdf を作成するための唯一のオプションです。次に、ADO.NET Entity Data Model を作成します。新しいデータ ソースを追加し、「BazaDataSet」をフォームにドラッグ アンド ドロップします。新しい値を追加するために、テキスト ボックスを含む別のフォームを作成します。新しいレコードを追加すると、「BazaDataSet」にのみ表示されます-正常に追加されますが、Baza.mdfで「テーブルデータを表示」をクリックしても何も変更されません。助けてください。

私のコードがあります: BazaEntities gg = new BazaEntities(); //var cos = (jj の u から u を選択); // jj.id = int.Parse(idAutaBox.Text); jj.marka = MarkaBox.Text; jj.model = ModelBox.Text; gg.AddToAutasSet(jj); gg.SaveChanges();

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

jpa - JPAを使用して、新しいエンティティを一度に作成するか、既存のエンティティを更新します

には、タイムスタンプフィールドがあり、複雑な識別子フィールドによって区別されるJPAエンティティがあります。必要なのは、すでに保存されているエンティティのタイムスタンプを更新することです。それ以外の場合は、現在のタイムスタンプで新しいエンティティを作成して保存します。

結局のところ、タスクは一見したところほど単純ではありません。問題は、並行環境で厄介な「一意のインデックスまたは主キー違反」例外が発生することです。これが私のコードです:

この例では、エンティティ識別子は挿入時に生成されないことに注意してください。事前にわかっています。

2つ以上のスレッドがこのコードブロックを並行して実行すると、メソッド呼び出しnullから同時に取得する可能性があるentityManager.find(Entity.class, id)ため、2つ以上のエンティティを同時に保存しようとし、同じ識別子でエラーが発生します。

この問題の解決策はほとんどないと思います。

  1. 確かに、このコードブロックをグローバルロックと同期して、データベースへの同時アクセスを防ぐことはできますが、それが最も効率的な方法でしょうか?
  2. MERGE一部のデータベースは、既存の行を更新するか、存在しない場合は新しい行を作成する非常に便利なステートメントをサポートしています。しかし、OpenJPA(私の選択したJPA実装)がそれをサポートしているとは思えません。
  3. イベントJPAがSQLMERGEをサポートしていない場合、いつでも古いJDBCにフォールバックして、データベースでやりたいことが何でもできます。しかし、私は快適なAPIを残したくなく、毛むくじゃらのJDBC+SQLの組み合わせを台無しにしたくありません。
  4. 標準のJPAAPIのみを使用して修正するための魔法のトリックがありますが、私はまだそれを知りません。

助けてください。

0 投票する
4 に答える
152421 参照

mysql - INSERT INTO ... SELECT FROM ... ON DUPLICATE KEY UPDATE

一意のキーがすでに存在する場合、多くの列のほとんどを新しい値に更新する必要がある挿入クエリを実行しています。これは次のようになります。

UPDATE句の構文がどうあるべきかわかりません。SELECT句から現在の行を参照するにはどうすればよいですか?

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

sql - 同じ MySQL トランザクションで依存テーブルを更新する方法は?

1 つのトランザクション内で 2 つのテーブルを更新する必要があります。個々のクエリは次のようになります。

上記のクエリで挿入が発生した場合は、2 番目のテーブルで次のステートメントを実行する必要があります。

それ以外は、

今、最初に t1 で SELECT を実行して、ステートメント 1 が t1 で挿入または更新を引き起こすかどうかを判断します。次に、ステートメント 1 と、トランザクション内でステートメント 2 と 3 のいずれかを実行します。これらすべてを 1 つのトランザクション内で行うにはどうすればよいですか?

私が考えていたアプローチは次のとおりです。

残念ながら、MySQL 5.0 にはマルチテーブル INSERT... ON DUPLICATE KEY UPDATE はありません。他に何ができますか?

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

sql - NHibernate を使用して、SQL サーバー側の DEFAULT 値を使用して挿入/更新する

データベース テーブルのいくつかには、LastModifiedDate 列が含まれています。単一のタイム ソースに基づいて、これらの同期を維持したいと考えています。この場合、最適なタイム ソースは SQL Server 自体です。データベース サーバーは 1 つだけですが、複数のアプリケーション サーバーは同期していない可能性があるためです。

NHibernate を使用できるようにしたいのですが、これらのテーブルの行を更新または挿入するときに、列の値に GETUTCDATE() または DEFAULT を使用する必要があります。

考え?

編集:応答がないことに基づいて、これはNHibernateができないことだと単純に信じなければなりません。これは私を悲しくさせます。

0 投票する
3 に答える
7588 参照

c# - EntityFramework-外部キーを使用して挿入

これに対する明確な答えがどこかにある場合は、お詫び申し上げます。しかし、外部キーが含まれているため、単純なテーブルに挿入できません。

タスクテーブル

  • TaskId(PK)
  • 説明
  • StatusId(FK)

    私はそのように挿入しようとします:

    ただし、updateExceptionエラーが発生します。 関係がAssociationSet'FK_Task_Status'に追加または削除されています。カーディナリティの制約がある場合、対応する「タスク」も追加または削除する必要があります。

    このテーブルに挿入するにはどうすればよいですか?

    乾杯

    ...。

    私の問題を見つけました...

    私のスキーマが間違っていました。外部キーを作成したときに、間違ったフィールドをポイントしました。SQLプロファイラーを見て、これを見ました:

    SELECT 1 AS [C1]、[Extent1]。[Id] AS [Id]、[Extent1]。[Descr] AS [Descr]、[Extent2]。[Id] AS [Id1]FROM[dbo]。[Status] AS [Extent1] LEFT OUTERJOIN[dbo]。[Task]AS[Extent2]ON[Extent1]。[Id]=[Extent2]。[Id]

    これはこれである必要があります(idではなくstatusIdに参加します):

    SELECT 1 AS [C1]、[Extent1]。[Id] AS [Id]、[Extent1]。[Descr] AS [Descr]、[Extent2]。[Id] AS [Id1]FROM[dbo]。[Status] AS [Extent1] LEFT OUTERJOIN[dbo]。[Task]AS[Extent2]ON[Extent1]。[Id]=[Extent2]。[StatusId]

    愚かな私;)

  • 0 投票する
    3 に答える
    115 参照

    php - mySQL: いつ更新し、いつ挿入するか知っていますか?

    私はまだかなりの mySQL 初心者なので、将来の事故を避けるためにこれを正しく行いたいと思います。

    UPDATEテーブルのエントリまたはINSERT新しいエントリがいつ必要になるかを検出する正しい方法は何ですか?

    ありがとうございました。

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

    c# - Linq2Sql - 更新しようとしていますが、SQL の Set ステートメントが空です

    これは奇妙です...完了した更新は何度も前に行われましたが、これが異なる理由を見つけることができません。私は現在.net 4.0を使用していますが、L2S実装のバグではないかと疑っています。これは、それの奇妙で素晴らしいアプリケーションではありません。RCを使用している間、このコードが機能したことはかなり確信していますが。

    また、以下の情報を使用してプロジェクトをゼロから構築することで、このエラーを再現することもできました。

    ここでの問題は、L2S によって生成された update ステートメントの set ステートメントにフィールドがないことです。私はpkが設定されていることを確認しようとしました(whereにすべてのフィールドが必要だと思う唯一の理由です)、他のdbmlプロパティも読んでみました。私は linq2Sql を約 1 年間使用していますが、問題が発生したことはありません。

    注: equals メソッドと GetHashCode メソッドをクリーンアップして、いくつかのフィールドを削除しました。この後も問題は解決しません。ただし、SQLをクリーンアップしていません。

    updateというメソッドを追加したdbmlのクライアントクラスがあります

    CopyToMe メソッドはインターフェイスから継承されます

    また、クラスには getHashCode がオーバーライドされています

    そして等しい

    部分クラスの update メソッド

    CopytoMe メソッド

    選択されたクライアントを取得し、その名前を変更してから、この更新メソッドを呼び出します。生成されたSQLは次のとおりです

    これが機能しない理由がわかりません...この種の

    オブジェクトを選択 -> フィールドを新しい値に設定 -> 選択したオブジェクトを送信

    パターンは何度もあり、この問題はありませんでした。また、dbml には明らかな問題はありません。ただし、これはおそらく誤った記述です。

    何か案は?

    この問題により、ADO.Net に戻らなければならないように見えてしまい、悲しくなります。

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

    sql - Oracle - 変更されていない値に対して更新が実行されない UPSERT

    現在、次の update または insert Oracle ステートメントを使用しています。

    これは、データが指定されたパラメーター値と同じである場合に更新ステートメントがダミーの更新を実行することを除いて、正常に実行されます。通常の状況ではダミーの更新は気にしませんが、テーブルのトリガーを使用して更新されたレコードをキャプチャし、このステートメントを多くのレコードに対して頻繁に実行することは、単にトリガーと同期システム。

    次の IF-EXISTS チェック コードを使用せずに更新ステートメントがレコードを更新しないように、このコードを再定式化する簡単な方法はありますか?


    MERGE INTO 文も使ってみたのですが、値が変更されていない場合の更新では機能しません (更新は何も変更せずに挿入を実行しますが、PK 違反が発生します)。

    完全な MERGE INTO サンプル:

    Oracle が UPDATE...IF SQL%ROWCOUNT=0 THEN INSERT... を MERGE INTO 句に内部的に使用しているように見えますか? 2 番目の MERGE INTO ステートメントは失敗します。update は何も更新せず、INSERT が実行され、値が変更されなかっただけで行が既に存在するため、PK 違反が発生するためです。

    0 投票する
    3 に答える
    219 参照

    oracle - 2 つのテーブル (Oracle DBMS) から「マージされた」データセットを生成する select SQL ステートメントを作成する方法は?

    ここに私の最初の質問があります: 2 つのデータセットをマージする

    残念ながら、ここで詳しく説明したいいくつかの複雑な部分を省略しました。

    したがって、2 つのテーブル events_source_1 と events_source_2 テーブルがあります。これらのテーブルから結果のデータセットにデータセットを生成する必要があります (3 番目のテーブルに挿入することはできますが、それは関係ありません)。

    events_source_1 には履歴イベント データが含まれており、最新のイベントを取得する必要があります (そのために次のことを行っています:

    events_source_2 には将来のイベント データが含まれており、次のことを行う必要があります。

    外部結合ステートメントを配置して空白を埋める方法 (つまり、event_source_2 から同じ event_type,b,c が見つかった場合、next_event_date は最初に見つかった日付で埋められます)

    事前にご支援いただき、誠にありがとうございます。