-

   rss_rss_hh_new

 - e-mail

 

 -

 LiveInternet.ru:
: 17.03.2011
:
:
: 51

:


SQL Server Integration Services (SSIS) 2

, 12 2017 . 19:47 +

1 habrahabr.ru/post/330618

Products:
  1. Union All ;
  2. , , . Lookup;
  3. OLE DB Command.

Multicast .

: Union All, Lookup, OLE DB Command Multicast.

.

SSIS


:


LoadProducts_ver2.dtsx:


Control Flow Data Flow Task:


Data Flow Task Data Flow. Source Assistant SourceA SourceB. Source A Source B :


Source A :

:
SELECT
  ID SourceProductID,
  Title,
  Price
FROM Products

, SourceID.

Source B :

:
SELECT
  ID SourceProductID,
  'B' SourceID,
  Title,
  Price
FROM Products

A 3 [SourceProductID, Title, Price], B 4 [SourceProductID, SourceID, Title, Price].

Union All, 2- . Source A Source B:


, Union All:


, . , SourceID :

SourceID Source A NULL.

SSIS. , / SQL Server, SQL SQL- UNION JOIN ( Lookup ).

NULL A Derived Column Union All:


Derived Column :


( ):
  1. Derived Column Replace 'SourceID' SourceID ;
  2. Expression REPLACENULL;
  3. REPLACENULL SourceID;
  4. A.

, Union All Enable Data Viewer , Union All Derived Column:


, :

, ( Derived Column) SourceID NULL.

DemoSSIS_Target Lookup:


:


, , , no match output. 2 Lookup Match Output Lookup No Match Output.
, Ignore failure, , TargetID (. ) NULL Lookup Match Output.

Full cache , , SQL (. ) SQL Server.
Partial cache No cache, Advanced , . SQL Server Profiler .

, :

:
SELECT
  SourceID,
  SourceProductID,
  ID TargetID
FROM Products

( ):

SourceProductID SourceProductID SourceID SourceID.

Destination Assistant Lookup No Match Output:


Lookup OLE DB Destination Lookup No Match Output:


:


OLE DB Destination :




.

OLE DB Command Lookup:


Lookup Match Output, .. Lookup No Match Output :


OLE DB Command :



:
UPDATE Products
SET
  Title=?,
  Price=?
WHERE ID=?

Lookup Match Output:


SSMS DemoSSIS_SourceB:
USE DemoSSIS_SourceB
GO

--   
SET IDENTITY_INSERT Products ON

INSERT Products(ID,Title,Price)VALUES
(6,N'',NULL),
(7,N'',NULL),
(8,N' ',NULL)

SET IDENTITY_INSERT Products OFF
GO

, , , Enable Data Viewer:


:


, 3 OLE DB Destination 10 OLE DB Command.

OLE DB Command , .. 10 .

OLE DB Command TSQL, , , Title Price, - .

Products DemoSSIS_Target:
USE DemoSSIS_Target
GO

ALTER TABLE Products ADD UpdatedOn datetime
GO

:

:
DECLARE @TargetID int=?
DECLARE @Title nvarchar(50)=?
DECLARE @Price money=?

IF(EXISTS(
      SELECT Title,Price
      FROM Products
      WHERE ID=@TargetID
      EXCEPT
      SELECT @Title,@Price
    )
  )
BEGIN
  UPDATE Products
  SET
    Title=@Title,
    Price=@Price,
    UpdatedOn=GETDATE()
  WHERE ID=@TargetID
END

, EXEC ProcName ?,?,?. , , , , , .. SSIS-. , , , SSIS-.

:


DemoSSIS_SourceA :
USE DemoSSIS_SourceA
GO

UPDATE Products
SET
  Price=30
WHERE ID=2 -- 

.
, UPDATE 1 , .


:
USE DemoSSIS_Target
GO

SELECT *
FROM Products
ORDER BY UpdatedOn DESC



Multicast. . , .. , , .

DemoSSIS_Target LastAddedProducts:
USE DemoSSIS_Target
GO

CREATE TABLE LastAddedProducts(
  SourceID char(1) NOT NULL, --    
  SourceProductID int NOT NULL, -- ID  
  Title nvarchar(50) NOT NULL,
  Price money,
CONSTRAINT PK_LastAddedProducts PRIMARY KEY(SourceID,SourceProductID),
CONSTRAINT CK_LastAddedProducts_SourceID CHECK(SourceID IN('A','B'))
)
GO

Control Flow Execute SQL Task TRUNCATE TABLE LastAddedProducts:




Data Flow Data Flow Task :


- , UpdatedOn . OLE DB Destination, Mappings UpdatedOn Ignore OK:


OLE DB Destination Multicast:


:


To LastAddedProducts:




SSMS :
USE DemoSSIS_Target
GO

DELETE Products
WHERE SourceID='B'
  AND SourceProductID>=6

:


2 Products LastAddedProducts.


. , , , .. , , ( ).
, , , , Deleted bit ( ) DeletedOn datetime (/ ).

, Target ( Staging) Source . Target Staging , SQL- (, SQL- MERGE JOIN), .

SSIS , , . , , , , Linked Servers TSQL - ..

, , , , , , . , , . , , .

! !

Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/330702/

:  

: [1] []
 

:
: 

: ( )

:

  URL