【问题标题】:copy structure of sqlserver table WITH index带索引的sql server表的复制结构
【发布时间】:2012-07-12 15:42:45
【问题描述】:

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

我想将每个表的结构从“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.

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2012-02-02
      • 2011-05-19
      • 1970-01-01
      • 2011-07-21
      • 2010-11-24
      • 1970-01-01
      • 2012-09-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多