рдЯрд╛рдЗрдк 1 рдФрд░ 2 рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдЖрдпрд╛рдо рдмрдирд╛рдиреЗ рдХреА рд╡рд┐рдзрд┐

рд╣рдо рджреВрд░рд╕рдВрдЪрд╛рд░ рдореЗрдВ DWH рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЬрд┐рд╕ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЙрд╕реЗ "рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдмрд░" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рд┐рджреНрдзрд╛рдВрдд рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╣реИ рдФрд░ рдпрд╣ "рдЧреНрд░рд╛рд╣рдХ" рдпрд╛ "рд░реЛрдЧреА" рд╣реЛ рд╕рдХрддрд╛ рд╣реИ - рдЙрджреНрдпреЛрдЧ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╡рд┐рднрд┐рдиреНрди рдЙрджреНрдпреЛрдЧреЛрдВ рд╕реЗ DWH рдбреЗрд╡рд▓рдкрд░реНрд╕ рджреНрд╡рд╛рд░рд╛ рдХрд╛рд░реНрдпрдкреНрд░рдгрд╛рд▓реА рдЙрдкрдпреЛрдЧреА рдкрд╛рдИ рдЬрд╛рдПрдЧреАред

рдпрджрд┐ рдЖрдкрдХреЛ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИ рдХрд┐ рдбреАрдбрдмреНрд▓реНрдпреВрдПрдЪ, рдорд╛рдк рдФрд░ рддрдереНрдп рдХреНрдпрд╛ рд╣реИрдВ, рддреЛ рдореИрдВ рд░рд╛рд▓реНрдл рдХрд┐рдордмреЙрд▓ рдХреА рдкреБрд╕реНрддрдХ рдбрд╛рдЗрдореЗрдВрд╢рдирд▓ рдореЙрдбрд▓рд┐рдВрдЧ рдХреЛ рдкрдврд╝рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред рд╣рдо рдПрдХ рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЬрд╝ рдХреА рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕ рдФрд░ рд╕рдореЗрдХрд┐рдд рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рдкреНрд░рд╢реНрдиреЛрдВ рдореЗрдВ рдЪрдпрди (WHERE) рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ (рдлрд╝реАрд▓реНрдбреНрд╕) рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдорд╛рдкреЛрдВ (рдлрд╝реАрд▓реНрдбреНрд╕) рдХреЗ рдЧрдарди рдФрд░ рдЕрджреНрдпрддрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред

рд╣рдорд╛рд░реА рддрдХрдиреАрдХ Microsoft SQL рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рд╣реИред

рдкрд░рд┐рд╡рд░реНрддрди рдкрд░рд┐рднрд╛рд╖рд╛ рд╕рд┐рджреНрдзрд╛рдВрдд


рдкреНрд░рдХрд╛рд░ 1 (рдкреБрди: рд▓рд┐рдЦрдиреЗ рдпреЛрдЧреНрдп) рдФрд░ 2 (рдорд╛рдк рд░рд┐рдХреЙрд░реНрдб рдореЗрдВ рдЗрддрд┐рд╣рд╛рд╕ рдХреЗ рднрдВрдбрд╛рд░рдг рдХреЗ рд╕рд╛рде) рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдкрд░рд┐рд╡рд░реНрддрди рдЦреЗрддреЛрдВ рдХреЗ рдЪреЗрдХрд╕рдо рдХреА рддреБрд▓рдирд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЪреЗрдХрд╕рдореЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, T-SQL CHECKSUM рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЯрд╛рдЗрдк рдЯреЗрдХреНрд╕реНрдЯ, рдиреЗрдХреНрд╕реНрдЯ, рдЗрдореЗрдЬ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЖрдпрд╛рдореЛрдВ рдореЗрдВ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ BINARY_CHECKSUM рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ NULL рд╡рд╛рд▓реЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХрд╛ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╕рдВрднрд╡ рд╣реИред рдЗрд╕ рддрдХрдиреАрдХ рдХреЗ рд╕рд╛рде, .NET рдкрд░ рд╡рд┐рдХрд╕рд┐рдд рдХрд╕реНрдЯрдо рдЪреЗрдХрд╕рдо рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред

рдорд╛рдк рдХреА рдШреЛрд╖рдгрд╛


рдПрдХ рдЖрдпрд╛рдо рдХреЛ рдПрдХ рдкреНрд░рд╛рдердорд┐рдХ рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдЧреБрдЪреНрдЫреЗрджрд╛рд░ рд╕реВрдЪрдХрд╛рдВрдХ рд╣реЛрддрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрд╕рдХреНрдпреВрдПрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ "рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдмрд░" рдЖрдпрд╛рдо рдШреЛрд╖рдгрд╛:

USE [DWH] GO /*     Dim */ IF SCHEMA_ID('Dim') IS NULL EXECUTE('CREATE SCHEMA [Dim] AUTHORIZATION [dbo]') GO /*   */ IF EXISTS ( SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[Dim].[]') AND OBJECTPROPERTY(id, N'IsUserTable') = 1 ) DROP TABLE [Dim].[] GO /*   */ CREATE TABLE [Dim].[] ( [AccountKey] INT NOT NULL IDENTITY(1,1) PRIMARY KEY CLUSTERED, [ ] INT NULL, [ ] NVARCHAR(13) NOT NULL CHECK ([ ] IN (N'.', N'.', N' ')) DEFAULT N' ', [] NVARCHAR(16) NOT NULL DEFAULT N' ', [ ] NVARCHAR(50) NOT NULL DEFAULT '   ', [  ] DATE, [  ] DATE, [] NVARCHAR(100) NOT NULL DEFAULT '   ', [] NVARCHAR(100) NOT NULL DEFAULT '   ', [] NVARCHAR(100) NOT NULL DEFAULT '   ', [ ] DATE, [] AS [] + CASE WHEN [] != N'   ' THEN N' ' + [] ELSE N'' END + CASE WHEN [] != N'   ' THEN N' ' + [] ELSE N'' END, [ ] NVARCHAR(100) NOT NULL DEFAULT N'   ', ... [] NVARCHAR(200) NOT NULL DEFAULT N'   ', [  SMS] NVARCHAR(20) NOT NULL DEFAULT N'   ', [] NVARCHAR(200) NOT NULL DEFAULT N'   ', [E-mail] NVARCHAR(50) NOT NULL DEFAULT N'   ', [ ] AS N': ' + [] + N', ' + N'  SMS: ' + [  SMS] + N', ' + N': ' + [] + N', ' + N'E-mail: ' + [E-mail], [StartTime] DATETIME2 NOT NULL, [EndTime] DATETIME2 NULL, [Checksum1] INT NULL, [Checksum2] INT NULL ) /*    */ SET IDENTITY_INSERT [Dim].[] ON INSERT INTO [Dim].[] ([AccountKey],[ ],[StartTime]) VALUES (-1, NULL, GETDATE()) SET IDENTITY_INSERT [Dim].[] OFF GO 


рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдорд╛рдк рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕реНрдерд┐рддрд┐ [EndTime] IS NULL рдХреЗ рд╕рд╛рде рд╡реНрдпрд╛рдкрд╛рд░ рдХреБрдВрдЬреА рдкрд░ рдПрдХ рд╕рд╢рд░реНрдд рд╕реВрдЪрдХрд╛рдВрдХ рд▓рдЧрд╛рдпрд╛ рдЬрд╛рдПред рдорд╛рдк рддрд╛рд▓рд┐рдХрд╛ ([AccountKey]) рдХреА рдкреНрд░рд╛рдердорд┐рдХ рдХреБрдВрдЬреА рдХреЗ рдХреНрд▓рд╕реНрдЯрд░ рдЗрдВрдбреЗрдХреНрд╕ рдХреЗ рдЕрдзреАрди рдЗрдВрдбреЗрдХреНрд╕ рдореЗрдВ рдЪреЗрдХрд╕рдо рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛, рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХреНрд╡реЗрд░реА рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╕рдордп рдорд╛рдк рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рд╕реНрд╡рдпрдВ рдирд╣реАрдВ рдкрдврд╝рдиреЗ рджреЗрддрд╛ рд╣реИред рдЙрд╕реА рд╕рдордп, рд╕реВрдЪрдХрд╛рдВрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдирд┐рдпрдВрддреНрд░рдг рдХрд╛ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ - рдПрдХ рд╡реНрдпрд╛рдкрд╛рд░ рдХреБрдВрдЬреА рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реИрдз рд░рд┐рдХреЙрд░реНрдбред

"рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдмрд░" рдорд╛рдк рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг рд╕реВрдЪрдХрд╛рдВрдХ:

 CREATE UNIQUE INDEX IX__ ON [Dim].[] ([ ], [EndTime]) INCLUDE ([Checksum1], [Checksum2]) WHERE [EndTime] IS NULL 


рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рд╛рд░рдВрднрд┐рдХ SQL рдХреНрд╡реЗрд░реА

рдкреНрд░рд╛рд░рдВрднрд┐рдХ SQL рдХреНрд╡реЗрд░реА рдореЗрдВ рдПрдХ рдЖрдВрддрд░рд┐рдХ рд╕рдмрдХреНрд╡реЗрд░реА рд╣реЛрддреА рд╣реИ [i], рдЬреЛ рд╕реНрд░реЛрдд рдХреЙрдкреА рддрд╛рд▓рд┐рдХрд╛рдУрдВ рд╕реЗ рдлрд╝реАрд▓реНрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рддреА рд╣реИ, рдФрд░ рдПрдХ рдмрд╛рд╣рд░реА рдХреНрд╡реЗрд░реА [o], рдЬреЛ рдЪреЗрдХрд╕рдо рдЙрддреНрдкрдиреНрди рдХрд░рддреА рд╣реИ, рдФрд░ рд╡реНрдпрд╛рдкрд╛рд░ рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рд╡рд░реНрддрдорд╛рди рдорд╛рдк рдкрдВрдХреНрддрд┐ рдХреЛ рдЬреЛрдбрд╝рддреА рд╣реИред

"рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдмрд░" рдЖрдпрд╛рдо рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХреНрд╡реЗрд░реА рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг:

 SELECT [o].*, [].[Checksum2] AS [OLD_CHECKSUM2], [].[Checksum1] AS [OLD_CHECKSUM1], [].[AccountKey] AS [OLD_AccountKey] FROM ( SELECT i.*, CHECKSUM( [ ], [], [ ], [  ], [], [], [], [ ], [], [], [], [], [ ], [ ] ) AS [CHECKSUM2], CHECKSUM( [], [  SMS], [E-mail], [ ] ) AS [CHECKSUM1] FROM ( SELECT FROM [Raw].... LEFT JOIN [Raw].... ) AS [i] --     ) AS [o] --      LEFT JOIN [Dim].[] ON [o].[ ] = [].[ ] AND [].[EndTime] IS NULL --      


рдкреНрд░рдХрд╛рд░ рд░реВрдкрд╛рдВрддрд░рдг (рдпрд╣ рдЖрдорддреМрд░ рдкрд░ CAST (... AS NVARCHAR (..)) рдпрд╛ IIF (ISDATE ([...]) = 1, CAST ([...] AS DATE), NULL) рдХреЗ рд╕рд╛рде-рд╕рд╛рде рд╕рдВрдкреВрд░реНрдг рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рд╣реИред рд╕реНрд░реЛрдд рддрд╛рд▓рд┐рдХрд╛ (LEFT JOIN) рдФрд░ рд╕рд╢рд░реНрдд рдХреНрд╖реЗрддреНрд░ рдЧрдарди (CASE, IIF) рдЖрдВрддрд░рд┐рдХ рдХреНрд╡реЗрд░реА рдореЗрдВ FROM (...) AS [i] рдХреЗ рдЕрдВрджрд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдпрджрд┐ рд╕реНрд░реЛрдд рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рддрд░реНрдХ рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкрджрд╛рдиреБрдХреНрд░рдо рд╕реЗ рдХреБрдЫ рдбреЗрдЯрд╛ рдЦреАрдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ) рдФрд░ рдЗрд╕реЗ FROM рдХреЗ рдЕрдВрджрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ SSIS рдореЗрдВ рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ SQL рдЯрд╛рд╕реНрдХ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдореЗрдВ рдордзреНрдпрд╡рд░реНрддреА рдбреЗрдЯрд╛ рдмрдирд╛рддрд╛ рд╣реИ (рдЖрдкрдХреА рдирд╛рдордХрд░рдг рдпреЛрдЬрдирд╛ рдХрд╛ рдЕрд╡рд▓реЛрдХрди) рд╡рд╕реНрддреБрдУрдВ)ред рдЕрд╕реНрдерд╛рдпреА рддрд╛рд▓рд┐рдХрд╛рдПрдБ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдВрдЧреА рдХреНрдпреЛрдВрдХрд┐ SSIS рдЙрдирд╕реЗ рдЖрдЙрдЯрдкреБрдЯ рд╕реНрдЯреНрд░реАрдо рдХреЗ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

рдЖрдк рдЗрд╕рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЬрдирд╛ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рд╕реВрдЪрдХрд╛рдВрдХ рдФрд░ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХреНрд╡реЗрд░реА рдХреЗ рдмреАрдЪ рдмрд╛рддрдЪреАрдд рдХреА рд╢реБрджреНрдзрддрд╛ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЬрдирд╛ рдХреЗ рдЕрдВрдд рдореЗрдВ, рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдХреЛрдИ рд╕рдВрджрд░реНрдн рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:

рдЫрд╡рд┐

рд╡рд┐рд╢рд┐рд╖реНрдЯ рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо


рдЖрдпрд╛рдо рдмрдирд╛рдиреЗ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рдХрд╛ рдкреНрд░рд╡рд╛рд╣ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдкреНрд░рд╛рд░рдВрднрд┐рдХ SQL рдХреНрд╡реЗрд░реА рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ рдФрд░ рддрд░реНрдХ рдХреЛ рдФрд░ рдмрджрд▓ рджреЗрддрд╛ рд╣реИред

рдЫрд╡рд┐

рдСрдкрд░реЗрд╢рди рдореЗрдВ "рд╕реНрдЯрд╛рд░реНрдЯрдЯрд╛рдЗрдо рдЬреЛрдбрд╝рдирд╛", рдПрд╕рдПрд╕рдЖрдИрдПрд╕ рдкреИрдХреЗрдЬ рд╕реНрдЯрд╛рд░реНрдЯ рдЯрд╛рдЗрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рд╕реНрдЯрд╛рд░реНрдЯрдЯрд╛рдЗрдо рдЬреЛрдбрд╝реЗрдВ (рд╡реЗрд░рд┐рдПрдмрд▓ @ [рд╕рд┐рд╕реНрдЯрдо :: рдЯрд╛рдЗрдордЯрд╛рдЗрдо] рд▓реЗ рд▓реЗрдВ))

рдСрдкрд░реЗрд╢рди "рдЯрд╛рдЗрдк 1 рдЕрдкрдбреЗрдЯ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдПрдВ" рдореЗрдВ, рд╣рдо рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рд╕реНрдЯреНрд░реАрдо - "рдЯрд╛рдЗрдк 1 рдлрд╝реАрд▓реНрдб рдЕрдкрдбреЗрдЯ рдХрд┐рдП рдЧрдП рд╣реИрдВ" рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ! ISNULL (OLD_CHECKSUM1) && CHECKSUM1! = OLD_CHECKSUM1ред

рдСрдкрд░реЗрд╢рди рдореЗрдВ "рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдХреБрдВрдЬреА рджреНрд╡рд╛рд░рд╛ рдЯрд╛рдЗрдк 1 рдХреЗ рдлрд╝реАрд▓реНрдб рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ", рд╣рдо рд╕рднреА рдЖрдпрд╛рдо рд░рд┐рдХреЙрд░реНрдб (рдЯрд╛рдЗрдк 2 рдлрд╝реАрд▓реНрдб рдХреЗ рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рдореВрд▓реНрдпреЛрдВ рд╡рд╛рд▓реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрдВрдж рд░рд┐рдХреЙрд░реНрдб рд╕рд╣рд┐рдд) рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдкрд╣рд▓реЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЧреБрдг рдмрджрд▓ рдЧрдП рд╣реИрдВ - рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд░рд┐рдХреЙрд░реНрдбреЛрдВ рдХреЛ рдХрд╛рдЯрдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рд╡реНрдпрд╡рд╕рд╛рдп рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред ([EndTime] рдкрд░ рдХреЛрдИ рд╢рд░реНрдд рдирд╣реАрдВ)ред "рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдмрд░" рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг:

 UPDATE [Dim].[] SET [] = ?, [  SMS] = ?, [E-mail] = ?, [ ] = ? [Checksum1] = ? WHERE [ ] = ? 


рдСрдкрд░реЗрд╢рди рдореЗрдВ "рдЯрд╛рдЗрдк 2 рдЕрдкрдбреЗрдЯ рдФрд░ рдирдП рд░рд┐рдХреЙрд░реНрдб рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдПрдВ", рд╣рдо рджреЛ рдзрд╛рд░рд╛рдУрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рддреЗ рд╣реИрдВ:
  1. "рдирдпрд╛ рдПрдХ ISNULL рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдкрд░ рдЖрдзрд╛рд░рд┐рдд (OLD_AccountKey)
  2. CHECKSUM2! = OLD_CHECKSUM2 рдкрд░ рдЖрдзрд╛рд░рд┐рдд "рдЯрд╛рдЗрдк 2 рдлрд╝реАрд▓реНрдбреНрд╕ рдЕрдкрдбреЗрдЯреЗрдб"


"рдмрдВрдж рдорд╛рдк рдорд╛рдк рдкрдВрдХреНрддрд┐рдпреЛрдВ" рдСрдкрд░реЗрд╢рди рдореЗрдВ, рдзрд╛рд░рд╛ рд╕реЗ рдкреНрд░рд╛рд░рдВрдн рд╕рдордп рдорд╛рди рдХреЗ рд╕рд╛рде рдорд╛рдк рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд▓рд┐рдП [EndTime] рдЕрджреНрдпрддрди рдХрд░реЗрдВред "рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдмрд░" рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг:

 UPDATE [Dim].[] SET [EndTime] = ? WHERE [AccountKey] = ? 


рдСрдкрд░реЗрд╢рди рдореЗрдВ "рдЖрдпрд╛рдо рдореЗрдВ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдбрд╛рд▓реЗрдВ" рд╣рдо рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдирдИ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдзрд╛рд░рд╛ рд╕реЗ StartTime рдХреЛ [StartTime] рдлрд╝реАрд▓реНрдб рдореЗрдВ рдбрд╛рд▓реЗрдВ, рдорд╛рдк рдХреБрдВрдЬреА рдФрд░ [EndTime] рдкрд░ рдзреНрдпрд╛рди рди рджреЗрдВ ([EndTime] рдлрд╝реАрд▓реНрдб рдореЗрдВ рдЙрддреНрдкрдиреНрди NULL рд╡рд░реНрддрдорд╛рди рд░рд┐рдХреЙрд░реНрдб рдХрд╛ рд╕рдВрдХреЗрдд рд╣реЛрдЧрд╛)ред

рдЕрдВрддрд┐рдо рдСрдкрд░реЗрд╢рди рдкрд░ рдкреЗрд╕реНрдЯ рдХрд░рддреЗ рд╕рдордп, рдпрд╣ рдлрд╛рд╕реНрдЯ рд▓реЛрдб рдореЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЕрдкрдбреЗрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рдереНрд░реЗрдб рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдЯреЗрдмрд▓ рд╕реНрддрд░ рдкрд░ рд▓реЙрдХ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд┐рдП рдмрд┐рдирд╛ рд▓рд╛рдЗрди рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрдиреНрдпрдерд╛ рдПрдХ рд╕рд╛рде рдХрд┐рдП рдЧрдП рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдмреАрдЪ рд╕рдВрдШрд░реНрд╖ рд╣реЛрдЧрд╛ред рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдЖрдк рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдЪрд░рдгреЛрдВ рдореЗрдВ рдЕрд▓рдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд░реЙ рдпрд╛ рдХреИрд╢ рдореЗрдВ рдордзреНрдпрд╡рд░реНрддреА рдкрд░рд┐рдгрд╛рдо рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдЖрджреЗрд╢ рдХрд╛ рдкрд╛рд▓рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд▓реЗрдирджреЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ


рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣ рдХрдВрдЯреЗрдирд░ (рдпрд╛ рд╕рд╛рдорд╛рдиреНрдп рдХрдВрдЯреЗрдирд░ рдХреЗ рд╕реНрддрд░ рдкрд░, рдпрджрд┐ рдЖрдкрдиреЗ рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣ рдХреЗ рдЪрд░рдгреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рд╣реИ), рддреЛ рд▓реЗрдирджреЗрди рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рд╡рд╛рдВрдЫрдиреАрдп рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, TransactionOption = рдЖрд╡рд╢реНрдпрдХ (DTC рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ) рдФрд░ IsolationLevel ReadCommitted рд╕реЗ рдХрдо рдирд╣реАрдВ рд╕реЗрдЯ рдХрд░реЗрдВред

рдпрджрд┐ рдХреЛрдИ рдкреНрд░рд╡рд╛рд╣ рдирд╣реАрдВ рд╣реИ, рддреЛ рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣ рдореЗрдВ рд░реБрдХрд╛рд╡рдЯ рдХреЗ рджреМрд░рд╛рди, рдХреБрдЫ рдорд╛рдк рд░рд┐рдХреЙрд░реНрдб рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд░рд┐рдХреЙрд░реНрдб рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рдмрдВрдж рд░рд╣ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдЧрд▓реА рд╢реБрд░реБрдЖрдд рдореЗрдВ, рд▓рд╛рдкрддрд╛ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреЛ рдирдП рдХреЗ рд░реВрдк рдореЗрдВ рдбрд╛рд▓рд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рд╢реБрд░реБрдЖрдд рдХреЗ рд╕рдордп рдкрд┐рдЫрд▓реА рдкрдВрдХреНрддрд┐ рдХреЗ рд╕рдорд╛рдкрди рд╕рдордп рд╕реЗ рдЕрд▓рдЧ рд╣реЛрдЧрд╛ред рдпрд╣ рддрдереНрдп рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрджрд┐ рддрдереНрдп рдЙрд╕ рд╕рдордп рд░рд┐рдХреЙрд░реНрдб рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдХреЛ рд╕рдВрд▓рдЧреНрди рдХрд░рдиреЗ рдХреА рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рдорд╛рдк рд╕реЗ рдмрдВрдзреЗ рд╣реЛрддреЗ рд╣реИрдВ - рдЬрдм рд╕рдВрдЪрд╛рд▓рди рдХреЗрд╡рд▓ рд╕рдорд╛рдкрди рд╕рдордп рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реЛрддрд╛ рд╣реИред

рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рд╕реЗ рддреБрд▓рдирд╛


рдзреАрд░реЗ-рдзреАрд░реЗ рдмрджрд▓рддреЗ рдЖрдпрд╛рдо рдирд╛рдордХ рдорд╛рдирдХ SQL рд╕рд░реНрд╡рд░ рдПрдХреАрдХрд░рдг рд╕реЗрд╡рд╛ рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ, рдпрд╣ рд╡рд┐рдзрд┐ рдЖрдпрд╛рдо рдкрдВрдХреНрддрд┐ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд╕рд╛рде рдкреНрд░рддреНрдпреЗрдХ рдХреНрд╖реЗрддреНрд░ рдХреА рддреБрд▓рдирд╛ рдирд╣реАрдВ рдХрд░рддреА рд╣реИ - рдпрд╣ рдЗрд╕ рддрд░рд╣ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рднреА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдореБрдЦреНрдп рд▓рд╛рдн - рдЧрддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдорд╛рдирдХ рдзреАрд░реЗ-рдзреАрд░реЗ рдмрджрд▓рддреЗ рдЖрдпрд╛рдо рддреБрд░рдВрдд рддрддреНрд╡реЛрдВ рдХреА рдПрдХ рдкреВрд░реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рд╕реЗ рдЙрдиреНрд╣реЗрдВ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдореЗрд░реЗ рд▓рд┐рдП рдЕрдЬреНрдЮрд╛рдд рдХрд╛рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП, рдорд╛рдирдХ SSIS рдШрдЯрдХ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддрд╛ рд╣реИ (рд╢рд╛рдпрдж рдпрд╣ NULL рдХреНрд╖реЗрддреНрд░реЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ)ред

рддреГрддреАрдп-рдкрдХреНрд╖ рд╡рд╛рдгрд┐рдЬреНрдпрд┐рдХ рдШрдЯрдХреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ, рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рдПрдХ рдореМрд▓рд┐рдХ рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдПрд╕рдХреНрдпреВрдПрд▓ рд░рд┐рд▓реАрдЬ рдХреЗ рд╕рд╛рде рднреЗрдЬреЗ рдЧрдП рдорд╛рдирдХ рдШрдЯрдХреЛрдВ рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЖрдкрдХреЛ SQL Server рдХреЗ рдЕрдЧрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрджреНрдпрддрди рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рд╡рд┐рдзрд┐ рд╕рдВрд╢реЛрдзрди


рдПрдХ рд╕рдВрд╢реЛрдзрд┐рдд рддрд░реАрдХрд╛ рд╕рдВрднрд╡ рд╣реИ рдЬрд╣рд╛рдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдирд╛ SQL рдХреНрд╡реЗрд░реА рдореЗрдВ рдирд╣реАрдВ рдмрд▓реНрдХрд┐ рд▓реБрдХрдЕрдк рдСрдкрд░реЗрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ SSIS рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдЕрдзрд┐рдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЙрд▓ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХрдо рдХреБрд╢рд▓ рдПрдХрд▓ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рднрд╛рд╡реА рд╣реИрд╢ рдореИрдЪ рдХреА рдЬрдЧрд╣ рд▓реЗрддрд╛ рд╣реИред рджреВрд╕рд░реА рдУрд░, рдпрд╣ рдЖрдкрдХреЛ рд╕реНрд░реЛрдд рддрд╛рд▓рд┐рдХрд╛рдУрдВ (рд╕реНрд░реЛрдд рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рд╕реЗ рд▓реЛрдбрд┐рдВрдЧ рдХреЗ рдЪрд░рдг рдореЗрдВ рдЙрддреНрдкрдиреНрди рддрд╛рд▓рд┐рдХрд╛рдУрдВ) рдФрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рд░реНрд╡рд░реЛрдВ рдкрд░ рдорд╛рдк рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕ рдЕрд╡рд╕рд░ рдХрд╛ рд▓рд╛рдн рд╕рдВрджреЗрд╣ рдореЗрдВ рд╣реИред

рдорд░реНрдЬ рдЬреНрд╡рд╛рдЗрди рдСрдкрд░реЗрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрд╕рдПрд╕рдЖрдИрдПрд╕ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдирд╛ рд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рдЯреЗрдмрд▓ рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдФрд░ рдЗрд╕реЗ рд╕реЙрд░реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЗ рдлрд╛рдпрджреЛрдВ рдХреЛ рдирдХрд╛рд░ рджреЗрдЧрд╛ред

рдЪреЗрдХрд╕рдо рдХреА рдЧрдгрдирд╛ рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рднреА рд╕рдВрднрд╡ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдШрдЯрдХ рдХреЗ рд░реВрдк рдореЗрдВ, рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдШрдЯрдХреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдЕрднрд╛рд╡ рдХрд╛ рд▓рд╛рдн рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

C # рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдЪреЗрдХрд╕рдо рдХреА рдЧрдгрдирд╛ рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдВрд╢реЛрдзрди рд╡рд┐рдХрд▓реНрдк рд╣реИ, рдпрджрд┐ рдпрд╣ рдЬрдЯрд┐рд▓рддрд╛ рд╕рдордЭ рдореЗрдВ рдЖрддреА рд╣реИред

рд╕рдВрд╢реЛрдзрд┐рдд рд╡рд┐рдзрд┐ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди (рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдХреЗ рд╕рд╛рде) рдХрд╛ рдПрдХ рд╕рд┐рдВрд╣рд╛рд╡рд▓реЛрдХрди (рдЗрд╕рдХреЗ рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рддрдереНрдп рдореЗрдВ) рдХреЛрдиреНрд╕рдиреНрд╕ рд╕реЗ рдЪреЗрдХрд╕рдо рдХреА рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдореБрдлреНрдд рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдФрд░ рдХрд╕реНрдЯрдо рд▓реБрдХрдЕрдк (рдЗрдВрдбреЗрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП) рдпрд╣рд╛рдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

Source: https://habr.com/ru/post/In195838/


All Articles