SQL Server - 从不同服务器和不同架构刷新表数据

时间:2016-09-19 04:28:49

标签: sql-server-2008 tsql

要求:我们过去常常将10到50个表名(来自不同架构和服务器(使用链接服务器))作为从Prod到测试或开发环境的刷新请求。

Ex:我们在prod中有3个架构,称为dbo,Schema1和Schema 2,在其他环境中我们有不同的架构名称,如schemaC和SchmaD等。

为此,我使用以下脚本以单引号获取表名。

第1步:

声明@String Varchar(8000)=' schemaname.table1,schemaname.table2,schemname.table1s45k'

设置@String ='''' +替换(@String,',',''',''')+'&#39 ;''

选择@String

步骤2:我将备份bkpdata基表中的现有表格数据。

第3步:我将截断备份表

步骤4:我将借助链接服务器ex:在开发框中将数据从Production移动到dev / test环境

插入到databasename.schemaname.tablename中select * from linkedservername.schemaname.tablename

如果我们能够获得带有参数工具的动态SQL代码作为表名,数据库名,链接服务器名和模式名称工具,那将是很棒的。

任何其他选项也受到高度赞赏。

添加其他详细信息:

声明@String Varchar(8000)=' schema1.rnd,schema2.test'

设置@String ='''' +替换(@String,',',''',''')+'&#39 ;''

声明@Strings表(名称varchar(max)) 插入@strings 选择@String

从sys.tables中选择'截断表' +'' +名称中的名称(从@strings中选择名称)

它将结果显示为Truncate表Tablename。所以我不想执行结果,它必须自己执行输出。我猜动态SQL会有所帮助。

1 个答案:

答案 0 :(得分:1)

--@String contains location where to(db.schema.tablenm) copy and where from(servevr.dbb.schema.tablenm)
--At the end of each copy and copy from need to provide , as delimeter
--copy to and copy from is seprated by |

Declare @String Varchar(8000) = 
'db.schema.tablenm|servevr.dbb.schema.tablenm,
db1.schema1.tablenm1|servevr1.db1.schema1.tablenm1,
db2.schema2.tablenm2|servevr2.db2.schema2.tablenm2,
'
Declare @str Varchar(8000)
Declare @execStr Varchar(8000)
Declare @delimeterocc int
Declare @delimeterSer int
declare @start int

set @start=0
Set @delimeterocc=charindex(',',@String)
While(@delimeterocc>0)
begin
    set @str=SUBSTRING(@String,@start,len(@string)-(len(@String)-@delimeterocc)-@start)
    Set @delimeterSer=charindex('|',@str)
    print 'Insert Into ' + SUBSTRING(@str,1,@delimeterSer-1)  + ' Select * From '+ SUBSTRING(@str,@delimeterSer+1,len(@str)-@delimeterSer)
    Set @start=@delimeterocc+1
    Set @delimeterocc=charindex(',',@String,@start) 
end