The below script help us to create hashvalue which can be used to compare records while inserting/updating rows in a table using SSIS packages.
In script task select the columns you want to consider for deriving hashvalue and copy-paste the below code:
/* Microsoft SQL Server Integration Services Script Component
* Write scripts using Microsoft Visual C# 2008.
* ScriptMain is the entry point class of the script.*/
using System;
using System.Data;
using Microsoft.SqlServer.Dts.Pipeline.Wrapper;
using Microsoft.SqlServer.Dts.Runtime.Wrapper;
using Microsoft.SqlServer.Dts.Pipeline;
using System.Text;
using System.Security.Cryptography;
[Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute]
public class ScriptMain : UserComponent
{
private PipelineBuffer inputBuffer;
public override void ProcessInput(int InputID, PipelineBuffer Buffer)
{
inputBuffer = Buffer;
base.ProcessInput(InputID, Buffer);
}
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
var counter = 0;
var values = new StringBuilder();
//loop through input columns
for (counter = 0; counter < inputBuffer.ColumnCount; counter++)
{
object value;
value = inputBuffer[counter];
//add each column value to one big string
values.Append(value);
}
//set output column as results of hash method
Row.HashColumn = CreateHash(values.ToString());
base.Input0_ProcessInputRow(Row);
}
private string CreateHash(string data)
{
//get byte array of long data string
var dataToHash = (new UnicodeEncoding()).GetBytes(data);
//create hash provider and compute hash of byte array
var sha1 = new SHA1CryptoServiceProvider();
var hashedData = sha1.ComputeHash(dataToHash);
RNGCryptoServiceProvider.Create().GetBytes(dataToHash);
//convert results to hexadecimal string (SQL friendly format)
var result = BitConverter.ToString(hashedData).Replace("-", "");
return result;
}
}
No comments:
Post a Comment