質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

2回答

13044閲覧

BulkCopyにてUpdate、Insertを実現。

yuki00079

総合スコア45

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2016/09/29 23:41

編集2016/09/29 23:42

###前提・実現したいこと
BulkCopyを最近知り、高速更新に感動しているところですがBulkCopyではレコードのない(Keyに違反していない)ものしか処理が出来ず、高速で更新(すでにレコードが存在する場合Update)をかけるような処理がないかと考えております。
SQLでいうMerge,Upsertのようなもの。

###発生している問題・エラーメッセージ

高速でDB更新を行いたい。

###補足情報(言語/FW/ツール等のバージョンなど)
.net4.5

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

更新などが出来ない代わりに高速に処理できるのがバルクコピーの特徴です。
ですから、一時的なテーブル(※一時テーブルとは限らない)を作ってそこに一気にアップロードしてから、ストアドなどで適切な処理を行うのが一般的です。

投稿2016/09/30 03:46

編集2016/09/30 03:46
hihijiji

総合スコア4150

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuki00079

2016/09/30 05:55

返信ありがとうございます。 >一時的なテーブル(※一時テーブルとは限らない)を作ってそこに一気にアップロード >ストアドなどで適切な処理を行うのが一般的 たとえばどのような処理方法なのでしょうか?。一時テーブルの作成処理を行った経験がございませんのでイメージがわきません。 一時テーブル?に対象データをBulkCopy後、どのような処理が適切なのでしょうか。
hihijiji

2016/09/30 07:42

>>一時的なテーブル(※一時テーブルとは限らない) この表現があいまいでしたね。 私はバルクコピーに使うテーブルは、名前が#から始まるローカルテンポラリテーブルや、名前が##から始まるグローバルテンポラリテーブルではなく、普通のテーブルを作っておいて TRUNCATE TABLE でクリアしてから使ってます。 最後に処理したデータを残しておくことで、トラブルがあったときの役に立つかな?と思っての事です。しかし実際に役立ったことはなかったのでお好きなように。 ストアドプロシージャは、「SQLでいうMerge」をそのまま書くだけです。
yuki00079

2016/09/30 09:29

>私はバルクコピーに使うテーブルは なるほど、その辺は用途次第ですね。 >ストアドプロシージャは、「SQLでいうMerge」 一時テーブルと実際処理を行いたいテーブルでのMerge処理ですか。 コードだけでは実現が困難のようですね。その例だとSQLが必要になりますね。 考えていた処理ではBulkCopy時に元のDBに一致するレコードがあれば処理を変更する等を考えていたのですが難しそうですね。
hihijiji

2016/09/30 10:09

コードを書くのが好きでSQLが嫌いなら、NET Framework から使える SqlBulkCopy もあります。 上記手順よりは大分低速になりますが、.IDEの機能を使えばSQLを書かなくても何とかなったはずです。
yuki00079

2016/10/03 01:59

SQLを書くのが嫌いというわけではないのですが、コードだけで完結できるかなと考えた次第です。臨機応変にストアドのようなサーバー側の力も借りて処理を行っていきます。
guest

0

DBによって動作が違うかもしれませんので、実際にPRIMARY KEYやUNIQUE KEYがあるテーブルとないテーブルを用意して動作確認されては?

投稿2016/09/29 23:46

Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuki00079

2016/09/29 23:48

返信ありがとうございます。 当方はSQLServerでの更新のみ考えております。 また、Key違反や重複によるエラーは既に確認済みです。(データInsertの為。)
Orlofsky

2016/09/29 23:54

SQLServerの環境があるならキーがダブるデータを2件用意して実行されては? わたしはSQLServerの環境がないのと正規マニュアルが分からいので確認していません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問