USE [msdb]

GO

DECLARE @start DATETIME2(7)

DECLARE @stop DATETIME2(7)

DECLARE @elapsed1 BIGINT

DECLARE @elapsed2 BIGINT

--\-------------------------------------------------------------------------

---) TEST PERFORMANCE of HASHBYTES function.

--/-------------------------------------------------------------------------

SELECT @start = GETDATE();

SELECT TOP1000000

UPPER(

CONVERT(CHAR(32),

HASHBYTES('MD5',

--UPPER(

CONCAT( ISNULL(CONVERT(NVARCHAR(128), o1.[name]), N'')

, ';', ISNULL(CONVERT(NVARCHAR(50), o1.[object_id]), N'')

, ';', ISNULL(CONVERT(NVARCHAR(50), o1.[principal_id]), N'')

, ';', ISNULL(CONVERT(NVARCHAR(50), o1.[schema_id]), N'')

, ';', ISNULL(CONVERT(NVARCHAR(50), o1.[parent_object_id]), N'')

, ';', ISNULL(CONVERT(NVARCHAR(50), o1.[type]), N'')

, ';', ISNULL(CONVERT(NVARCHAR(50), o1.[type_desc]), N'')

, ';', ISNULL(CONVERT(NVARCHAR(50), o1.[create_date], 126), N'')

, ';', ISNULL(CONVERT(NVARCHAR(50), o1.[modify_date], 126), N'')

, ';', ISNULL(CONVERT(NVARCHAR(50), o1.[is_ms_shipped]), N'')

, ';', ISNULL(CONVERT(NVARCHAR(50), o1.[is_published]), N'')

, ';', ISNULL(CONVERT(NVARCHAR(50), o1.[is_schema_published]), N'')

, ';', ISNULL(CONVERT(NVARCHAR(128), o2.[name]), N'')

, ';', ISNULL(CONVERT(NVARCHAR(50), o2.[object_id]), N'')

, ';', ISNULL(CONVERT(NVARCHAR(50), o2.[principal_id]), N'')

, ';', ISNULL(CONVERT(NVARCHAR(50), o2.[schema_id]), N'')

, ';', ISNULL(CONVERT(NVARCHAR(50), o2.[parent_object_id]), N'')

, ';', ISNULL(CONVERT(NVARCHAR(50), o2.[type]), N'')

, ';', ISNULL(CONVERT(NVARCHAR(50), o2.[type_desc]), N'')

, ';', ISNULL(CONVERT(NVARCHAR(50), o2.[create_date], 126), N'')

, ';', ISNULL(CONVERT(NVARCHAR(50), o2.[modify_date], 126), N'')

, ';', ISNULL(CONVERT(NVARCHAR(50), o2.[is_ms_shipped]), N'')

, ';', ISNULL(CONVERT(NVARCHAR(50), o2.[is_published]), N'')

, ';', ISNULL(CONVERT(NVARCHAR(50), o2.[is_schema_published]), N'')

, ';', ISNULL(CONVERT(NVARCHAR(128), o3.[name]), N'')

, ';', ISNULL(CONVERT(NVARCHAR(50), o3.[object_id]), N'')

, ';', ISNULL(CONVERT(NVARCHAR(50), o3.[principal_id]), N'')

, ';', ISNULL(CONVERT(NVARCHAR(50), o3.[schema_id]), N'')

, ';', ISNULL(CONVERT(NVARCHAR(50), o3.[parent_object_id]), N'')

, ';', ISNULL(CONVERT(NVARCHAR(50), o3.[type]), N'')

, ';', ISNULL(CONVERT(NVARCHAR(50), o3.[type_desc]), N'')

, ';', ISNULL(CONVERT(NVARCHAR(50), o3.[create_date], 126), N'')

, ';', ISNULL(CONVERT(NVARCHAR(50), o3.[modify_date], 126), N'')

, ';', ISNULL(CONVERT(NVARCHAR(50), o3.[is_ms_shipped]), N'')

, ';', ISNULL(CONVERT(NVARCHAR(50), o3.[is_published]), N'')

, ';', ISNULL(CONVERT(NVARCHAR(50), o3.[is_schema_published]), N'')

) -- END CONCAT

--) -- END UPPER

) -- END HASHBYTES

, 2) -- END CONVERT

) -- END UPPER

FROM [sys].[objects] o1

CROSS JOIN [sys].[objects] o2

CROSS JOIN [sys].[objects] o3;

SELECT @stop = GETDATE();

SELECT @elapsed1 = DATEDIFF(MICROSECOND,@start, @stop);

--\-------------------------------------------------------------------------

---) TEST PERFORMANCE of [master].[sys].[fn_repl_hash_binary] function.

--/-------------------------------------------------------------------------

SELECT @start = GETDATE();

SELECT TOP 1000000

UPPER(

CONVERT(CHAR(32),

master.sys.fn_repl_hash_binary(CONVERT(VARBINARY(MAX),

--UPPER(

CONCAT( ISNULL(CONVERT(NVARCHAR(128), o1.[name]), N'')

, ';', ISNULL(CONVERT(NVARCHAR(50), o1.[object_id]), N'')

, ';', ISNULL(CONVERT(NVARCHAR(50), o1.[principal_id]), N'')

, ';', ISNULL(CONVERT(NVARCHAR(50), o1.[schema_id]), N'')

, ';', ISNULL(CONVERT(NVARCHAR(50), o1.[parent_object_id]), N'')

, ';', ISNULL(CONVERT(NVARCHAR(50), o1.[type]), N'')

, ';', ISNULL(CONVERT(NVARCHAR(50), o1.[type_desc]), N'')

, ';', ISNULL(CONVERT(NVARCHAR(50), o1.[create_date], 126), N'')

, ';', ISNULL(CONVERT(NVARCHAR(50), o1.[modify_date], 126), N'')

, ';', ISNULL(CONVERT(NVARCHAR(50), o1.[is_ms_shipped]), N'')

, ';', ISNULL(CONVERT(NVARCHAR(50), o1.[is_published]), N'')

, ';', ISNULL(CONVERT(NVARCHAR(50), o1.[is_schema_published]), N'')

, ';', ISNULL(CONVERT(NVARCHAR(128), o2.[name]), N'')

, ';', ISNULL(CONVERT(NVARCHAR(50), o2.[object_id]), N'')

, ';', ISNULL(CONVERT(NVARCHAR(50), o2.[principal_id]), N'')

, ';', ISNULL(CONVERT(NVARCHAR(50), o2.[schema_id]), N'')

, ';', ISNULL(CONVERT(NVARCHAR(50), o2.[parent_object_id]), N'')

, ';', ISNULL(CONVERT(NVARCHAR(50), o2.[type]), N'')

, ';', ISNULL(CONVERT(NVARCHAR(50), o2.[type_desc]), N'')

, ';', ISNULL(CONVERT(NVARCHAR(50), o2.[create_date], 126), N'')

, ';', ISNULL(CONVERT(NVARCHAR(50), o2.[modify_date], 126), N'')

, ';', ISNULL(CONVERT(NVARCHAR(50), o2.[is_ms_shipped]), N'')

, ';', ISNULL(CONVERT(NVARCHAR(50), o2.[is_published]), N'')

, ';', ISNULL(CONVERT(NVARCHAR(50), o2.[is_schema_published]), N'')

, ';', ISNULL(CONVERT(NVARCHAR(128), o3.[name]), N'')

, ';', ISNULL(CONVERT(NVARCHAR(50), o3.[object_id]), N'')

, ';', ISNULL(CONVERT(NVARCHAR(50), o3.[principal_id]), N'')

, ';', ISNULL(CONVERT(NVARCHAR(50), o3.[schema_id]), N'')

, ';', ISNULL(CONVERT(NVARCHAR(50), o3.[parent_object_id]), N'')

, ';', ISNULL(CONVERT(NVARCHAR(50), o3.[type]), N'')

, ';', ISNULL(CONVERT(NVARCHAR(50), o3.[type_desc]), N'')

, ';', ISNULL(CONVERT(NVARCHAR(50), o3.[create_date], 126), N'')

, ';', ISNULL(CONVERT(NVARCHAR(50), o3.[modify_date], 126), N'')

, ';', ISNULL(CONVERT(NVARCHAR(50), o3.[is_ms_shipped]), N'')

, ';', ISNULL(CONVERT(NVARCHAR(50), o3.[is_published]), N'')

, ';', ISNULL(CONVERT(NVARCHAR(50), o3.[is_schema_published]), N'')

) -- END CONCAT

--) -- END UPPER

) -- END HASHBYTES

) -- END CONVERT

, 2) -- END CONVERT

) -- END UPPER

FROM [sys].[objects] o1

CROSS JOIN [sys].[objects] o2

CROSS JOIN [sys].[objects] o3;

SELECT @stop = GETDATE();

SELECT @elapsed2 = DATEDIFF(MICROSECOND,@start, @stop);

SELECT @elapsed1 AS [Elapsed_HashBytes]

, @elapsed2 AS [Elapsed_fn_repl_hash_binary]

, 'HASHBYTES is ' + CONVERT(VARCHAR, CONVERT(decimal(19, 2), @elapsed2 / @elapsed1))

+ ' times faster than [fn_repl_hash_binary]' AS [Result]