MsSQL跨資料庫同步資料

2021-05-26 23:04:32 字數 3078 閱讀 6046

set quoted_identifier on

goset ansi_nulls on

goexec p_utils_synchronousmssqldata 'srv_lnk_yurun','yurun.dbo.rainview','st_pptn_r',

'stcd,tm,r5','*','tm','tm','where datepart(ss,tm)=0 ';--同步皎口雨情資訊

exec p_utils_synchronousmssqldata 'local','寧波水情資料庫.dbo.逐日雨情表','st_pptn_r',

'code5,日期,雨量','stcd,tm,dyp','日期','tm','where code5 = 01011'

*/                 

as                 

begin

set nocount on               

declare                 

@hisdb_maxtm datetime,/*歷史庫(本地庫)history database最新資料時間*/                 

@sdb_maxtm datetime,/*資料來源(遠端庫)source database最新資料時間*/

@where nvarchar(100),/*where 拼接sql*/                 

@sql nvarchar(3000);/*sql語句*/

/*初始化資料*/

set @targettable = (case when (@targettable is null or @targettable = '') then @sourcetable else @targettable end);

set @source_columns = (case when (@source_columns is null or @source_columns = '') then '*' else @source_columns end);

set @target_columns = (case when (@target_columns is null or @target_columns = '' or @target_columns = '*') then '' else '('+@target_columns+')' end);

set @target_tmcolumn = (case when (@target_tmcolumn is null or @target_tmcolumn = '') then @source_tmcolumn else @target_tmcolumn end);

set @where =  (case when (@sqlwhere is not null and @sqlwhere !='') then (@sqlwhere+' and ') else 'where' end);

/*判斷@table資料是否已為最新*/                 

set @sql=n'select @hisdb_maxtm=max('+@target_tmcolumn+') from'+@targettable+'

'+@sqlwhere+' ';              

exec sp_executesql @sql,n'@hisdb_maxtm datetime output',@hisdb_maxtm output;/*計算本地表最新資料時間*/

if(@hisdb_maxtm is null)

begin

set @sql=n'select @hisdb_maxtm=tm from openquery('+@srv_lnk+','' select min('+@source_tmcolumn+')[tm] from'+@sourcetable+'

'+@sqlwhere+' '')';             

exec sp_executesql @sql,n'@hisdb_maxtm datetime output',@hisdb_maxtm output;/*計算出源表最早資料時間*/

end;

set @sql=n'select @sdb_maxtm=tm from openquery('+@srv_lnk+','' select max('+@source_tmcolumn+')[tm] from'+@sourcetable+'

'+@sqlwhere+' '')';             

exec sp_executesql @sql,n'@sdb_maxtm datetime output',@sdb_maxtm output;/*計算出源表最新資料時間*/

exec('delete from '+@targettable+'

'+@where+'

'+@target_tmcolumn+' >= =@sdb_maxtm)                   

begin             

print('@hisdb_maxtm: '+convert(char(19),@hisdb_maxtm,120)+' <=> @sdb_maxtm: '+convert(char(19),@sdb_maxtm,120));

set @sql = 'insert into '+@targettable+@target_columns+' select'+@source_columns+' from openquery('+@srv_lnk+',                 

'' select '+@source_columns+' from '+@sourcetable+'

'+@where

+' convert(char(19),'+@source_tmcolumn+',120) >= '''''+convert(char(19),@hisdb_maxtm,120)+''''' order by'+@source_tmcolumn+''')'; 

exec sp_executesql @sql;                   

end       

end;

goset quoted_identifier off

goset ansi_nulls on

go

MSSQL資料庫同步

mssql資料同步利用資料庫複製技術實現資料同步更新 來自網路,也是非常完美的教程 複製的概念 複製是將一組資料從乙個資料來源拷貝到多個資料來源的技術,是將乙份資料發布到多個儲存站點上的有效方式。使用複製技術,使用者可以將乙份資料發布到多台伺服器 上,從而使不同的伺服器使用者都可以在許可權的許可的範...

MSSQL資料庫 跨表 和 跨資料庫 查詢方法

mssql資料庫 跨表 和 跨資料庫 查詢方法 條件 有資料庫 test1 資料庫 test2。test1中有表 table1 table2 test2 中有表 table1。三個表的字段為 id xingming shijian shuliang。一 跨資料庫 1 原始 select from o...

MSSQL跨伺服器資料庫查詢

建立鏈結伺服器 exec sp addlinkedserver 鏈結伺服器名稱 sqloledb 遠端伺服器名或ip位址 exec sp addlinkedsrvlogin 鏈結伺服器名稱 false null,需要鏈結伺服器使用者名稱 密碼 刪除鏈結伺服器exec sp droplinkedsrv...