仅使用脚本在 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 登录提示不会消失
使用 SQLCMD 执行 MS SQL Server (*.sql) 脚本备份还原操作有啥问题?