使用SSIS創建同步資料庫數據任務

来源:http://www.cnblogs.com/androidshouce/archive/2016/06/20/5599545.html
-Advertisement-
Play Games

SSIS(SQL Server Integration Services)是用於生成企業級數據集成和數據轉換解決方案的平臺。使用 Integration Services 可解決複雜的業務問題,具體表現為:複製或下載文件,發送電子郵件以響應事件,更新數據倉庫,清除和挖掘數據以及管理 SQL Serv ...


SSIS(SQL Server Integration Services)是用於生成企業級數據集成和數據轉換解決方案的平臺。使用 Integration Services 可解決複雜的業務問題,具體表現為:複製或下載文件,發送電子郵件以響應事件,更新數據倉庫,清除和挖掘數據以及管理 SQL Server 對象和數據。這些包可以獨立使用,也可以與其他包一起使用以滿足複雜的業務需求。Integration Services 可以提取和轉換來自多種源(如 XML 數據文件、平面文件和關係數據源)的數據,然後將這些數據載入到一個或多個目標。(摘自MSDN,更多詳細信息可參考:http://technet.microsoft.com/zh-cn/library/ms141026(v=sql.105).aspx

 

下麵我使用SSIS來演示一個實際例子。比如我有一個資料庫,出於備份數據或者其它的目的,會定期的對這個資料庫的數據遷移到其它的資料庫去。遷移的時候,有些新增的欄位會被插入備份資料庫,而有些被修改過的欄位也會在備份資料庫被修改。現在我們就用SSIS來完成這項任務。

首先在我源資料庫db_source和目標資料庫db_destination中運行以下SQL創建好需要的表,就以這一個表test_1來進行示範。

CREATE TABLE [dbo].[test_1](
    [Id] [int] IDENTITY(1,1) NOT NULL primary key,
    [Name] [varchar](50) NULL,
    [Age] [int] NULL
)

 

建好表好在源數據表中可以隨便加幾條記錄,目標資料庫暫時留空。

現在我們打開VS,創建一個Intergration Services Project。(註意:如果SQL Server 裝的是Express版的話是沒有這個項目工程模板的)

 

創建好工程後,在Control Flow這個Tab下拖入一個Data Flow Task,如下圖:

 

雙擊這個Data Flow Task,我們就會進入Data Flow這個Tab標簽中。

 

然後我們在左邊工具欄里找到OLE DB Source,繼續拖兩個OLE DB Source出來。分別給它們命名為Source DB和Destination DB。

 

將數據源拖出來後,雙擊它,可以對它進行一些設置,主要就是鏈接資料庫及選擇你要進行遷移的表或者視圖等設置,這裡我就不詳細說明瞭。註意一點的是就像上圖所示,如果一個圖形上出現一個紅X的話說明設置有錯誤。

再來就是拖兩個Sort及一個Merge Join出來,將之前的數據源箭頭分別指向兩個Sort,最後兩個Sort出來的數據同時輸入Merge Join中。

 

分別雙擊兩個Sort,鉤選表中的ID,對ID這個欄位進行一次排序。因為Merge Join這個流程要求輸入的數據是已排序好的。這個排序也可以直接在數據源中對它們的輸出欄位設置SortKeyPosition這個屬性來排序。(詳見:http://msdn.microsoft.com/zh-cn/library/ms137653.aspx

這裡我們第一次從Sort拉箭頭到Merge Join的時候,會讓我們選擇這個輸入的數據是作為左輸入還是右輸入,我們按照圖示的那樣,左邊的作為左輸入,右邊的作為右輸入。然後我們雙擊Merge Join,按照如下圖所示設置:

 

這裡打鉤的是這個流程之後輸出的數據,Join Type需要選擇為Left outer join,因為左邊是我們的原始數據表,右邊是我們備份的表,右表可以看成是一個左表的一個子集,如果左表有的數據,右表沒有的,那些就是需要新插入備份資料庫的數據。

現在我們需要一個分支,即新的數據需要插入備份資料庫中,而已有的數據需要更新為新的值。我們從工具欄中拖入一個Conditional Split來進行這樣的分支處理。我們將Merge Sort中的輸出指向Conditional Split,然後雙擊Conditional Split,如下圖所示設置(註意條件一個是ISNULL,一個是非ISNULL)。

 

這時它們的輸入值就被分成兩種條件輸出,最後我們再拖入一個OLE DB Destination來插入數據和一個OLE DB Command來更新資料庫,最終流程如下圖:

 

 

雙擊設置OLE DB Destionation,選擇好數據導入的目標資料庫中的表,這裡需要註意的就是要鉤選Keep identity這個選項,因為我創建表的時候對ID欄位使用了自增屬性。

雙擊設置OLE DB Command,首先在Connection Managers這個Tab中選擇好鏈接對象,然後在Component Properties這個選項卡中,設置你的SqlCommand屬性。如下圖:

 

這裡的參數值都是用?號來代替,之後在Column Mappings這個Tab中設置代替值實際代替的列,如下圖:

 

至此,任務就創建完畢了,沒有編寫任何代碼,直接拖拉完成了。現在可以直接在VS中按F5運行看下效果,我們的目標數據表將插入源數據表中的值。然後我們修改一下原數據表,再來運行一下上面這個任務,就可以在目標資料庫中看到更改了。

 

那麼如何去定時完成任務哩?這裡可以用SQL Server Agent去調用上面我們寫好的包, 或者在Windows計劃任務中使用DTExec.exe去執行上面的任務。

 

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1、標準sql規範 2、decode函數 DECODE的語法: DECODE(value,if1,then1,if2,then2,if3,then3,...,else) 表示如果value等於if1時,DECODE函數的結果返回then1,...,如果不等於任何一個if值,則返回else。 3、ca ...
  • WITH cte AS ( SELECT a.FNUMBER,a.FMATERIALID AS MainId,b.FMATERIALID AS ChileID,CAST(b.FMATERIALID AS VARCHAR(max)) AS lev FROM t_eng_bom a JOIN dbo.T ...
  • 本章主要講如何使用腳本創建資料庫;如何使用腳本創建表;如何刪除對象和修改對象. CREATE 語句:CREATE <object type> <onject name> 創建資料庫基本語法:CREATE DATABASE <database name> ON [PARIMARY] ( [NAME=< ...
  • mysql主從複製指兩個伺服器之間資料庫的同步,當主伺服器的數據進行了變更,從伺服器也會自動更新,其過程是通過bin log日誌實現的,本質是binlog日誌的傳輸。 mysql主從分兩個角色 1、主伺服器 master 2、從伺服器 slave 主伺服器 MySQL 配置 從伺服器 MySQL 配 ...
  • 上一篇介紹到查詢。這一篇主要講連接查詢,將介紹INNER JOIN,OUTER JOIN(LEFT和RIGHT),FULL JOIN,CROSS JOIN。 連接顧名斯義就是把多個數據表數據合併到一個結果集。 用內部連接檢索匹配的數據(inner join) 連接結構語法如下:SELECT <col ...
  • 對於設計和創建資料庫完全是個新手?沒關係,Joe Celko, 世界上讀者數量最多的SQL作者之一,會告訴你這些基礎。和往常一樣,即使是最專業的資料庫老手,也會給他們帶來驚喜。Joe是DMBS雜誌是多年來最受 讀者喜愛的作者。他在美國、英國,北歐,南美及非洲傳授SQL知識。他在ANSI / ISO ...
  • Query OK, 0 rows affected (0.00 sec) ...
  • 在PL/SQL編程當中,經常會遇到一些需要動態處理數據或表結構的問題,比如對一批表裡的數據進行處理,或者批量創建表,索引,觸發器等等,這個時候就可以通過DBMS_SQL包進行操作。你可能會有疑問,ORACLE不是提供了EXECUTE IMMEDIATE了嘛?幹嘛還要DBMS_SQL包來處理?嘿嘿,不 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...