1

新しいデータベースにテーブル (数十個) を作成し、古いデータベースから特定の情報をコピーするために、1 日に数回実行するスクリプトが必要です。これを「prev」データベースと呼びます。

各テーブルの構造を「前の」データベースから新しいデータベースにコピーしたいと考えています。それは簡単です(ありがとう、グーグル)。また、新しいテーブルで同じ情報をインデックス化できるようにしたいと考えています。インデックスは列にある場合もあれば、列の組み合わせにある場合もあります。これらのインデックスは手動で簡単に作成できます - インデックスはたくさんありますが。しかし、SQL に「さあ、前のテーブルのインデックスを見て、この新しいテーブルに同じものを入れてください」と伝える SQL スクリプトの方法があるかどうか疑問に思っています。

-- rename underlying files of old db.
ALTER DATABASE abc SET OFFLINE
alter database abc
modify file (name=abc,
filename = 'D:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\xyz.mdf')
GO
ALTER DATABASE abc
modify file (name=abc_log,
filename = 'D:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\xyz_log.ldf')
GO

ALTER DATABASE abc SET ONLINE

-- give new logical name to the prev database
-- not sure this will work, but I think it will
USE master
GO
ALTER DATABASE abc MODIFY NAME = xyz
GO

-- make a new database
CREATE DATABASE abc
GO

-- note that prev db is xyz, new one is abc but has no tables yet
USE abc
GO

-- for each table, copy the structure into table of new db with same name
SELECT TOP 0 INTO dbo.atab FROM xyz.dbo.atab
GO
  -- for each index in THIS table
  CREATE INDEX idx_field1 ON db.atab  (field1)
  GO
  CREATE INDEX idx_combined ON db.atab  (field2, field3)
  GO
  -- etc.

とにかく、このようなものはうまくいくと思います。その最後の部分を行うためのより良い方法はありますか?

4

1 に答える 1

0

あなたはグーグルが提供した素晴らしい洞察に言及していません。

ただし、SQL Serverを使用しているため、スクリプトについて知っておく必要があります。SQL Server Management Studioでは、データベースを右クリックして、[タスク]->[スクリプトの生成...]を選択できます。これにより、テーブルのインデックスや制約など、データベース内の一部またはすべてのオブジェクトのスクリプトを生成するウィザードが表示されます。

于 2012-07-12T19:23:08.243 に答える