こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

SQL2005で同構成の2つのDBを1つにまとめたいと考えております。

SQL2005で同構成の2つのDBを1つにまとめたいと考えております。

現在、定期的に決められた時間のLogをサンプリングして、
DBにためるような事をしております。

しかし、実行するたびにDBができてしまい一つに集約したいと
思ってますが、その際クエリとかでガッチャンコできるのでしょうか?
もしくは、バックアップを取ってそれを1つのDBにがっちゃんこなんかできるのでしょうか?

ご存知の方、ご教授いただければと思います。

投稿日時 - 2010-02-23 16:19:06

QNo.5700255

困ってます

質問者が選んだベストアンサー

#1です。
説明の都合上、以下の通りとしましょう。
・テーブル1:データベース db1、スキーマ dbo、テーブル hogehoge
・テーブル2:データベース db2、スキーマ dbo、テーブル hogehoge
・両者のテーブルレイアウトは同じ(ID, hoge, hoge1, hoge2)とします。

1) TOP 10をクエリで実行する場合
SELECT TOP 10 hoge,Count(*)
FROM (
SELECT * FROM db1.dbo.hogehoge
UNION ALL
SELECT * FROM db2.dbo.hogehoge) tmp
GROUP BY hoge
ORDER BY COUNT(*) DESC

2) 毎回UNION ALLを指定するのが大変ならば、上記をViewにします。
Viewはdb1に作っても、db2につくっても、全く別のdb3に作っても構わないです。

CREATE VIEW v_hogehoge
AS
SELECT ID, hoge, hoge1, hoge2 FROM db1.dbo.hogehoge
UNION ALL
SELECT ID, hoge, hoge1, hoge2 FROM db2.dbo.hogehoge

上記を作ったデータベースで、
SELECT TOP 10 hoge,Count(*)
FROM v_hogehoge
GROUP BY hoge
ORDER BY COUNT(*) DESC

3) 1)や2)の方法では、どうしてもパフォーマンスは悪くなりますから、
db3に2つのテーブルを統合したテーブルを作ってもよいなら、以下の通りです。

CREATE DATABASE db3
GO
USE db3
GO
CREATE TABLE dbo.hogehoge (ID int, hoge varchar(10), hoge1 varchar(10), hoge2 varchar(10))
GO
INSERT INTO dbo.hogehoge
SELECT * FROM db1.dbo.hogehoge
UNION ALL
SELECT * FROM db2.dbo.hogehoge
GO

・上記例のテーブルのデータ型は適当です。実際のテーブル作成スクリプトが必要ならば、SQL Server Management Studioで、db1またはdb2のhogehogeテーブルを右クリックすると、スクリプトを
出力するオプションがあります。
(通常は主キーやNOT NULL制約もついているはずですので、この方法でスクリプトを出力してテーブルを作ります)
・対象のテーブルは1つだけでも、他のマスタテーブルとの関連(外部キー制約)がついている場合は、そのマスタテーブルを先に作らないといけません。
・テーブルを別に作るということは、すでにあるdb1、db2のテーブルとは別物になるということです。
 1)2)の方式では、結局db1,db2のhogehogeを参照していることには変わりないので、db1,db2のhogehogeのデータが変わればそれは反映します。
 でも、3)の方式では、データを入れ替えないと反映しません。

以上、若干詳しめに書いてみました。参考にしてください。

投稿日時 - 2010-02-23 18:41:31

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

技術的には、実行のつどデータベースを作成しないようにすることも、複数の同一レイアウトのDBを統合することも可能です。
ただし、データベースのリストアでは実現できません。
前者は実行モジュールの変更が必要でしょうし、後者は別に統合用スクリプトを書く必要があるでしょう。
具体的な方法は詳細情報がないとコメントしようがないですが。。

投稿日時 - 2010-02-23 17:11:06

お礼

ご解答ありがとうございます。

現在やりたい事としましては、2つのテーブルから、Top10を出すなどが行いたいと考えてます

詳細としましては、カラムの設定など全て同じのテーブルが2つあります。
テーブル1 テーブル2 の集計をおこないたいのですが、2つを合わせて
集計したいと思ってます



1.テーブル1とテーブル2を1つのテーブルへ合体させる
2.もしくは、クエリで2つのテーブルのデータを元に集計できる

その際使用するクエリを教えていただければと思います。

投稿日時 - 2010-02-23 18:10:33

あなたにオススメの質問