0

我们有大量数据,为了节省备份时间,我的任务是创建当前数据库的副本,该数据库仅包含指定的公司代码/公司。

我被告知要研究 TSQL 脚本、信息模式和批量副本。我只是想知道最好的路线是什么以及如何开始我确实在本地拥有最新的数据库副本。

该脚本将通过

允许我们在顶部指定新数据库的名称以及公司表中的公司代码或 ID 列表。

并创建一个新数据库并仅复制相关的数据

4

1 回答 1

1

可能甚至没有接近最好的方法......但是你可以做到的100种方法中的一种。

declare @databasename nvarchar(100) = 'roflcopter'
, @destination = 'myschema.mytable'
declare @companylist nvarchar(max) = (select stuff( select ',' +convert(nvarchar(5),companyid) from companytable where database = @databasename),1,1,'')

declare @query nvarchar(max) 
= N'use ['+@databasename+']
insert into '+@destination+' /* maybe add dynamic columns here */
select /*same dynamic columns */
from mytable /*or another variable*/
where companyid in('''+@companylist+''')
'
exec (@query)

添加您的其他变量等来声明目标、未来的数据库名称(如果创建)和您想要的任何内容......动态 sql 可能会很慢、很麻烦并且会重新连接。可能要检查 sp_executesql 以了解 exec () 和 executesql 之间的差异

有大量的系统过程......可以找到 FK、列名、数据类型、pks ......你可以通过使用(这里没有我的帮助)那些系统过程动态创建当前模式来使它复杂化,C# 到轻松“生成脚本”并执行它们。

也可能是您想的错误方向。

于 2013-11-19T18:00:19.653 回答