【问题标题】:Copy indexes from a "parent" SQL Server database to a subset of the tables将索引从“父”SQL Server 数据库复制到表的子集
【发布时间】:2020-07-28 20:24:19
【问题描述】:

我们有一个客户使用在 SQL Server 2014 上运行的第 3 方系统。我从第 3 方下载了 .bak 格式的底层数据库副本,其中包含大约 1500 个表且没有数据。客户使用此架构的精简版本,其中包含大约 150 个表,删除了他们不使用的表。

不知何故,他们还设法删除了所有索引... 叹息。他们给我发了一个 .bak 来做一些报告查询,但性能让我大吃一惊。

我想将原始“模式”数据库中的索引(和 pkey)复制到客户的副本中。我已经看到了一个关于to do this with two identical DBs 的出色解决方案,但是使用这些会给我留下 1400 个不存在的名称,这会导致 MSSQLAdmin 出现问题。任何人都可以提供不假定“子”数据库具有每个表并且仅在存在的表上创建的修改吗?

【问题讨论】:

  • 最简单的解决方案可能是下载比较工具,例如 ApexSQL,然后以这种方式同步它们。 Apex 的 SQL 代码比较似乎是免费的:apexsql.com/sql-tools-compare.aspx
  • 似乎很容易调整链接问题中的代码以过滤掉不属于表格列表的所有内容

标签: sql-server


【解决方案1】:

如果您使用的是您提到的the question 的公认答案:

WHILE (@@FETCH_STATUS = 0)
BEGIN
    DECLARE @IXSQL NVARCHAR(4000) SET @IXSQL = 'IF OBJECT_ID(''' + @IxTable + ''') IS NOT NULL BEGIN ' --create index if table exists

    SET @IXSQL = @IXSQL + 'CREATE '
    ..............
    
    SET @IXSQL = @IXSQL + ') END'
    -- Print out the CREATE statement for the index
    .................

【讨论】:

    猜你喜欢
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 2011-12-26
    • 2015-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-18
    相关资源
    最近更新 更多