1

我需要一个每天运行多次的脚本来在新数据库中构建表(数十个)并从旧数据库中复制某些信息,我将其称为“上一个”数据库。

我想将每个表的结构从“上一个”数据库复制到新数据库。这很容易做到(谢谢,谷歌)。我还希望能够在新表中索引相同的信息。索引有时在列上,有时在列的组合上。我可以很容易地手动构建这些索引——即使它们有很多。但是,我想知道是否有一种 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.

无论如何,我认为这样的事情会奏效。有没有更好的方法来完成最后一部分?

4

1 回答 1

0

你没有提到谷歌提供的伟大洞察力。

但是,由于您使用的是 SQL Server,因此您应该了解脚本。在 SQL Server Management Studio 中,您可以右键单击数据库并选择Tasks --> Generate Scripts ...。这会将您带到一个向导,该向导将为数据库中的部分或所有对象生成脚本,包括表上的索引和约束。

于 2012-07-12T19:23:08.243 回答