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...