仅使用脚本在 MS SQL Server 之间移动多个表

Posted

技术标签:

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

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

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

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

最简单的方法是什么?

【问题讨论】:

您是否考虑过使用动态 sql,然后遍历您的表列表 你能不能只为模式和数据生成带有 SSMS 的脚本? 【参考方案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

【讨论】:

井目的地可以很容易地以与字符串中的表格相同的方式选择 像魅力一样工作,谢谢!关于保持表的身份属性有什么建议吗? 此方法只复制列的名称和数据类型。没有其他元数据。没有约束,没有键,外键。 您可能想要复制数据库并从那里删除不必要的表以保留所有内容。否则你可能需要一堆脚本或使用向导

以上是关于仅使用脚本在 MS SQL Server 之间移动多个表的主要内容,如果未能解决你的问题,请参考以下文章

MS SQL Server 中的标量 UDF 在查询中仅返回一个值

MS Access - SQL Server 登录提示不会消失

MS Sql Server 对象创建/更改脚本

使用 SQLCMD 执行 MS SQL Server (*.sql) 脚本备份还原操作有啥问题?

如何检查 SQL 脚本是不是在 MS SQL Server 中成功执行?

将 MS SQL Server 图像数据移动到 MySQL longblob