【问题标题】:Moving multiple tables between MS SQL Servers using only script仅使用脚本在 MS SQL Server 之间移动多个表
【发布时间】:2016-03-31 13:10:36
【问题描述】:

如何在 SQL 服务器之间移动多个表(但不是数据库的每个表)?

我有一个需要复制的表的列表。有没有办法从这个列表中创建一个枚举(或类似的东西),并遍历这些项目,以创建一个动态脚本?

我已经创建了一个链接服务器连接,脚本应该可以使用这种方法。脚本中也需要用到身份插入。

最简单的方法是什么?

【问题讨论】:

  • 您是否考虑过使用动态 sql,然后遍历您的表列表
  • 你能不能只为模式和数据生成带有 SSMS 的脚本?

标签: sql sql-server copy


【解决方案1】:

您只应该处理@dest 和@tables。

declare @tables varchar(MAX)
declare @t varchar(50)
declare @sql varchar(MAX)
declare @dest varchar(80)

set @dest = 'myNewServer.newDb..';
set @tables = '[Table1], [Table2]'


while len(@tables) > 0
begin
  --print left(@tables, charindex(',', @tables+',')-1)
  set @t = left(@tables, charindex(',', @tables+',')-1)
  set @sql = 'select * into "+ @dest + @t + ' from '+@t
  set @tables = stuff(@tables, 1, charindex(',', @tables+','), '')

  execute(@sql)

end

此方法复制所有标签数据,保留 ID,因为:

"... 这不会复制除列信息(名称和数据类型)之外的任何元数据。因此它不会具有安全权限、索引、触发器、约束等。上面的 Management Studio 示例就是这样说的也有同样的问题。”来自https://msdn.microsoft.com/en-us/library/aa337553.aspx

【讨论】:

  • 井目的地可以很容易地以与字符串中的表格相同的方式选择
  • 像魅力一样工作,谢谢!关于保持表的身份属性有什么建议吗?
  • 此方法只复制列的名称和数据类型。没有其他元数据。没有约束,没有键,外键。
  • 您可能想要复制数据库并从那里删除不必要的表以保留所有内容。否则你可能需要一堆脚本或使用向导
猜你喜欢
  • 2017-03-16
  • 2016-11-02
  • 2012-05-31
  • 1970-01-01
  • 2011-04-12
  • 1970-01-01
  • 2018-01-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多