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

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

新規登録して質問してみよう
ただいま回答率
85.37%
INSERT

INSERTとは、行を追加する、コンピュータのデータベース言語SQLにおけるデータ操作言語(DML)ステートメントの1つである

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

トランザクション

トランザクションとは、関連・依存する処理を一連の不可分な処理単位として扱う処理方式を指します。トランザクションとして管理された処理は「すべて成功」か「すべて失敗」のいずれかであることが保証される。処理に失敗した場合は、一連の処理がロールバックされます。

Q&A

解決済

1回答

46559閲覧

【SQL】異なるDB間でのデータ移行を行いたい。

xxx8

総合スコア41

INSERT

INSERTとは、行を追加する、コンピュータのデータベース言語SQLにおけるデータ操作言語(DML)ステートメントの1つである

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

トランザクション

トランザクションとは、関連・依存する処理を一連の不可分な処理単位として扱う処理方式を指します。トランザクションとして管理された処理は「すべて成功」か「すべて失敗」のいずれかであることが保証される。処理に失敗した場合は、一連の処理がロールバックされます。

0グッド

1クリップ

投稿2018/07/11 05:07

編集2018/07/11 05:26

前提・実現したいこと

異なるDB間でのデータ移行を行いたいです。

該当のソースコード

vb.net

1insert into [コピー先データベース名A].[dbo].テーブル名(列名1,列名2,列名3,) 2select 列名1,列名2,列名3,3from [コピー元データベース名B].[dbo].テーブル名

上記のやりかたでもいいのですが
実現可能であれば
各DBに対してトランザクション(コミット、ロールバック含む)
を行いたいです。

詳細

あくまでイメージなのですが

1.コピー先データベース名AのテーブルAに対して必要なデータ(コピーするデータ)をSELECT

2.コピー先データベース名Bのテーブルに対して「1」でSELECTした結果をINSERT

1または2の処理のどこかでエラーが起きた場合は
そのエラーが起きたDBに対してロールバックを行う。

実現可能でしょうか。

もしかしてですが・・・・

vb.net

1insert into [コピー先データベース名A].[dbo].テーブル名(列名1,列名2,列名3,) 2select 列名1,列名2,列名3,3from [コピー元データベース名B].[dbo].テーブル名

の処理に対してトランザクションを行い、
エラーが起きた場合に、コピー先データベース名A・B
の両方に対してロールバックを行えばいいというものなのでしょうか。

よろしくお願い致します。

追記(2018/07/11 14:25)

方法として以下のものしか思いつかないのですが
実現できますでしょうか?

1.コピー先データベース名AのテーブルAに対して必要なデータ(コピーするデータ)をSELECTし
結果をどこかに保存。

2.コピー先データベース名Bのテーブルに対して「1」で保存してあるSELECT結果のデータ(複数レコード)
をレコード分ループしてINSERT

よろしくお願い致します。

補足情報(FW/ツールのバージョンなど)

環境

・sql sv2014
・Win sv 2012r2
・Win7
・vb.net
・vs2015

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

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

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

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

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

sazi

2018/07/11 05:27

データ移行というのはシステムを切り替える場合の作業を言います。内容からしてDB間のデータ連携のように思えますが?
xxx8

2018/07/11 05:30

すみません。言葉が悪かったです。仰るとおりデータ連携のようなものです。
guest

回答1

0

ベストアンサー

同じSQLSERVERであれば、分散トランザクションによって管理されるので、一つのトランザクション内であれば、複数のSQLを発行したとしても、全体として管理されます。

投稿2018/07/11 05:24

sazi

総合スコア25300

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

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

xxx8

2018/07/11 05:28

SQL SERVER、サーバーOSともに同じバージョンではありますが 物理的に別のサーバー内にあるDBです・・・
sazi

2018/07/11 05:32

リンク先を確認してもらえば分かりますが、物理的な別DBであっても、一つのDBであるかのように制御されます。 ですので、INSERT INTO SELECTを分解する必要は無いということです。
xxx8

2018/07/11 05:38

確認しました。 ありがとうございます。 DBアクセス用のオブジェクトを Public データベースA As New ClsSqlServerDatabase Public データベースB As New ClsSqlServerDatabase として持っているので、 Public データベースAtoB As New ClsSqlServerDatabase などとして新しいオブジェクトを用意して INSERT INTO SELECTの実行等行いたいと思います。 とても助かりました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問