2016-11-24 45 views
0

我需要將我的本地數據庫的兩個表導出到遠程。 無論如何,我不能將它們導出爲INSERT INTO腳本,因爲我無法將它們放到遠程數據庫中並再次填充它們(因爲FK和完整性約束)。那麼,是否可以將表格作爲每行的UPDATE語句而不是INSERT INTO?我正在使用SQL Server 2008/2012SQL Server:是否可以將表腳本編寫爲UPDATE?

+0

有任何數據示例? –

+0

使用SELECT列INTO NewTable FROM oldTable。 – scsimon

+0

是的!我應該如何發佈它們? –

回答

1
CREATE TABLE mytable(
    ExtractTypeNum INTEGER NOT NULL --PRIMARY KEY 
    ,FileOrderNum  VARCHAR(11) 
    ,PrevFileOrderNum VARCHAR(11) 
    ,NextFileOrderNum VARCHAR(11) 
    ,rownum1   INTEGER 
    ,Statusflag1  VARCHAR(9) 
); 
INSERT INTO mytable(ExtractTypeNum,FileOrderNum,PrevFileOrderNum,NextFileOrderNum,rownum1,Statusflag1) 
VALUES (1,'2016-09-191',NULL,'2016-09-192',1,'IsInitial'); 
INSERT INTO mytable(ExtractTypeNum,FileOrderNum,PrevFileOrderNum,NextFileOrderNum,rownum1,Statusflag1) 
VALUES (2,'2016-09-192','2016-09-191','2016-09-201',2,NULL); 
INSERT INTO mytable(ExtractTypeNum,FileOrderNum,PrevFileOrderNum,NextFileOrderNum,rownum1,Statusflag1) 
VALUES (3,'2016-09-201','2016-09-192','2016-09-211',3,NULL); 


select 'Update Table Xyz Set Abc='+Convert(varchar(25),rownum1)+' ' as X,* 
from myTable 
+0

在這裏你可以看到動態查詢這將幫助你解決你的問題 –

+0

這看起來很有趣......我會有一個試驗,但我不知道我會做到這一點,因爲我以前從未見過類似的東西o_O 。謝謝,這真的很有趣! –

+0

@Lory LoryThanks buddy –

1

有許多方法可以在數據庫之間同步數據。由於我的經驗,你可以通過兩個主要方式來完成:

  • 寫動態查詢,生成數據腳本爲2個目標表:

    1. 使用MERGE語句(https://msdn.microsoft.com/en-us/library/bb510625.aspx從MSSQL 2K8支持): 選擇'select * into #tmp from dbtarget.tbla where 1 < 0;'作爲數據 Union 選擇'insert into #tmp values('+ convert(varchar,cola)+','+ convert(varchar,colb)+','+ convert(varchar,colc)+');'作爲來自dbsource.tbla的數據;

    2. 在數據庫源上運行上面的查詢以獲取輸出腳本數據。
    3. 將腳本數據應用到目標數據庫。
    4. 使用MERGE語句合併#tmp表和目標表之間的數據。
  • 利用日誌傳送功能在同一結構和一個域網絡中的數據庫之間同步數據。 https://msdn.microsoft.com/en-us/library/ms190640(v=sql.110).aspx

  • +0

    謝謝你的回答。我從未使用MERGE語句。我試着閱讀一些文檔和你的例子,但我無法理解......所以,因爲我很着急,我會發布我的解決方案,即使它更復雜謝謝你,我想像... –

    0

    非常感謝Alfaiz艾哈邁德這是我最後的工作腳本:

    select 'UPDATE ERGO.DBO.RESIDENZE SET CODISEDERESI='+CONVERT(varchar(50),CODISEDERESI)+ 
               ',DESCRIRESIDE='+isnull(CONVERT(varchar(100),''''+replace(DESCRIRESIDE,'''','''''')+''''),'''''')+ 
               ',INDIRIRESIDE='+isnull(CONVERT(varchar(100),''''+replace(INDIRIRESIDE,'''','''''')+''''),'''''')+ 
               ',NOMERESIDENZ='+isnull(CONVERT(varchar(50),''''+replace(NOMERESIDENZ,'''','''''')+''''),'''''')+ 
               ',VIARESIDENZA='+isnull(CONVERT(varchar(50),''''+replace(VIARESIDENZA,'''','''''')+''''),'''''')+ 
               ',CAPRESIDENZA='+isnull(CONVERT(varchar(50),''''+CAPRESIDENZA+''''),'''''')+ 
               ',CITTARESIDEN='+isnull(CONVERT(varchar(50),''''+replace(CITTARESIDEN,'''','''''')+''''),'''''')+ 
               ',EMAILRESIDEN='+isnull(CONVERT(varchar(100),''''+EMAILRESIDEN+''''),'''''')+ 
               ' WHERE CODICERESIDE='+CONVERT(varchar(50),CODICERESIDE) 
    from RESIDENZE 
    

    我不得不使用replace()功能,因爲許多意大利人的名字有一個單引號在他們的名字的話,例如,我希望字符串D'AZEGLIO成爲D''AZEGLIO,以便通過SQL進行正確處理。最後,在執行查詢之前,我按CTRL+SHIFT+F將輸出保存爲生成的腳本的sql文件。

    相關問題