我需要一个每天运行多次的脚本来在新数据库中构建表(数十个)并从旧数据库中复制某些信息,我将其称为“上一个”数据库。
我想将每个表的结构从“上一个”数据库复制到新数据库。这很容易做到(谢谢,谷歌)。我还希望能够在新表中索引相同的信息。索引有时在列上,有时在列的组合上。我可以很容易地手动构建这些索引——即使它们有很多。但是,我想知道是否有一种 SQL 脚本方式来告诉 SQL,“来吧,伙计,看看那个 'prev' 表中的索引,并将相同的索引放在这个新表中。”
-- 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.
无论如何,我认为这样的事情会奏效。有没有更好的方法来完成最后一部分?