程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> SSIS 系列:Lookup 組件的使用與它的幾種緩存模式 - Full Cache

SSIS 系列:Lookup 組件的使用與它的幾種緩存模式 - Full Cache

編輯:關於SqlServer

先簡單的演示一下使用 Lookup 組件實現一個簡單示例 - 從數據源表 A 中導出數據到目標數據表 B,如果 A 數據在 B 中不存在就插入新數據到B,如果存在就更新B 和 A 表數據保持統一。

隨後再來解釋在這個過程中使用到的一些術語,以及分析一下 Lookup 中出現的幾種緩存模式,各自的特點以及常用的場合。

兩張表,一張是目標表 DEMO_LK_Customer,一張是 DEMO_LK_LegacyCustomer  舊系統表。我們可以理解我們這個示例要實現的目標是 DEMO_LK_Customer 表的數據要和DEMO_LK_LegacyCustomer 實現同步,保持一致。

USE BIWORK_SSIS
GO
    
-- Look up demo table
IF OBJECT_ID('DEMO_LK_Customer','U') IS NOT NULL
DROP TABLE DEMO_LK_Customer 
GO
    
IF OBJECT_ID('DEMO_LK_LegacyCustomer','U') IS NOT NULL
DROP TABLE DEMO_LK_LegacyCustomer 
GO
    
CREATE TABLE DEMO_LK_Customer
(
    CustomerID INT PRIMARY KEY, 
    CustomerCompany NVARCHAR(255), 
    CustomerName NVARCHAR(20),
    CustomerAddress NVARCHAR(255)
)
    
CREATE TABLE DEMO_LK_LegacyCustomer
(
    CustomerID INT PRIMARY KEY, 
    CustomerCompany NVARCHAR(255), 
    ContactName NVARCHAR(20),
    ContactTitle NVARCHAR(50),
    CustomerAddress NVARCHAR(255)
)
    
INSERT INTO DEMO_LK_Customer VALUES
(1,'HFBZG','Allen,Michael','Obere Str. 0123'),
(2,'MLTDN','Hassall, Mark','Avda. de la Constitución 5678'),
(3,'KBUDE','Peoples, John','Mataderos  1000')
    
INSERT INTO DEMO_LK_LegacyCustomer VALUES
(1,'NRZBB','Allen,Michael','Sales Representative','Obere Str. 0123'),
(2,'MLTDN','Hassall, Mark','Owner','Avda. de la Constitución 5678'),
(3,'KBUDE','Peoples, John','Owner','Mataderos  7890'),
(4,'HFBZG','Arndt, Torsten','Sales Representative','7890 Hanover Sq.'),
(5,'HGVLZ','Higginbotham, Tom','Order Administrator','Berguvsvgen  5678')
    
SELECT * FROM DEMO_LK_Customer
SELECT * FROM DEMO_LK_LegacyCustomer
--UPDATE DEMO_LK_Customer SET CustomerName = ?, CustomerCompany = ?, CustomerAddress = ? WHERE CustomerID = ?
--UPDATE DEMO_LK_Customer SET CustomerName = ? WHERE CustomerID = ?
--UPDATE DEMO_LK_Customer SET CustomerAddress = ? WHERE CustomerID = ?

在測試數據中,我們認為兩張表的 ID 都是不變的唯一的,第1條數據和第3條數據不一致,第4條和第5條數據在目標表中不存在。

先看一下實現這個例子的 SSIS Package 結構,最外面的是一個數據流 DF_Lookup。

在數據流中,數據源 OLE_SRC_LegacyCustomer 在這個例子中使用的是 SQL Server 數據庫表,但是這個數據源也可以是文本文件,Excel 或者其它數據庫的表或者查詢的結果集。

這個數據源相對於 Lookup 組件 LKP_Customer 來說是 Lookup 組件的輸入項。

LKP_Customer 之後有兩個分支 - 匹配和不匹配分支,做的事情就是匹配的數據做更新,不匹配的數據做插入動作。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved