我们有大量数据,为了节省备份时间,我的任务是创建一个仅包含指定公司代码/公司的当前数据库副本。
我被告知要研究TSQL脚本,信息模式和批量副本。我只是想知道最好的路线是什么,以及如何开始我在本地拥有最新的数据库副本。
该脚本可以通过
工作请允许我们在顶部指定新数据库的名称以及公司表中的公司代码或ID列表。
创建一个新数据库并仅复制相关数据
答案 0 :(得分:1)
可能甚至没有接近最好的方式......但是100种方法中有1种可以做到。
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()和executionql
之间的差异有大量的系统程序......找到FK,列名,数据类型,pks ...你可以通过构建动态创建当前模式(在这里没有我的帮助)这些系统过程来使它复杂化,C#轻松“生成脚本”并执行它们。
也可能是你想的错误方向。