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]