我在DTS包中需要同步两台(A、B)服务器上的数据,A是源服务器,B是目的服务器,两台服务器上的数据库表结构完全一致;其中的Article表有一个nText字段,在导数据的过程中要将这个字段中的少部分内容进行替换(将URL地址替换成本服务器的URL)。
如下面的脚本,但每次执行都出错。//**********************************************************************
// Java 转换脚本
//************************************************************************// 将各源列复制到目的列
function Main()
{
var re = /172.1.1.4\/Web/;
var ss = DTSSource("txtArticleContent");
DTSDestination("txtArticleContent") = ss.replace(re,'202.98.0.1');
return(DTSTransformStat_OK);
}
如下面的脚本,但每次执行都出错。//**********************************************************************
// Java 转换脚本
//************************************************************************// 将各源列复制到目的列
function Main()
{
var re = /172.1.1.4\/Web/;
var ss = DTSSource("txtArticleContent");
DTSDestination("txtArticleContent") = ss.replace(re,'202.98.0.1');
return(DTSTransformStat_OK);
}
DTSDestination("txtArticleContent") = Replace(DTSSource("txtArticleContent"),'172.1.1.4','202.98.0.1');
先轉換下類型....
比如SQL中
declare @t table(c ntext)
insert into @t select 'xxx127.1.1.14'--直接replace
select replace(c,'127.1.1.14','225.225.225.0') from @t ----報錯!!--需要轉換類型:
select replace(convert(varchar(100),c),'127.1.1.14','225.225.225.0') from @t
/*結果: xxx225.225.225.0*/你可以考慮在DTS的source中先將其轉換類型後再導入到destination中,
或者你試下看看Replace(CStr(DTSSource("txtArticleContent")),'172.1.1.4','202.98.0.1'),這個不知道能不能行?
--把單引號改成雙引號...
DTSDestination("txtArticleContent") = Replace(DTSSource("txtArticleContent"),"172.1.1.4","202.98.0.1")
select * from source_table a(nolock)
where not exists (select 1 from destination_table b(nolock) where a.key=b.key)2.或者在source_table加個flag欄位:--如果別的地方用到此表需要注意多了個欄位
alter table source_table add flag int not null default 0
在source里下SQL條件:
select * from source_table (nolock) where flag=0
每次轉換資料成功後加一個Execute SQL Task,執行語句:
update source_table set flag=1
你在設計DTS的時候,不是有很多Task可以拖過來用的麼,在"資料轉換"後面拖一個
"SQL Execute TASK"或者"ActiveX Script"都是可以的.前者支持SQL語句,可能效率高點,
後者支持VBscript,JSscript等等