sqlserver表的复制结构WITH索引

时间:2012-07-12 15:42:46

标签: database sql-server-2008-r2 indexing alter

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

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

无论如何,我认为这样的事情会起作用。是否有更好的方法来完成最后一部分?

1 个答案:

答案 0 :(得分:0)

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

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