CHECKSUM replacement for IMAGE

,

As we all know, BINARY_CHECKSUM ignores columns of data type IMAGE.
This code is 100% compatible with MS original. That is, the result is identical.
You can use it "as is", or you can use it to see that MS function does not produce that unique values one could expect.

CREATE FUNCTION dbo.fnPesoBinaryChecksum
(
	@Data IMAGE
)
RETURNS INT
AS

BEGIN
	DECLARE	@Index INT,
		@MaxIndex INT,
		@SUM BIGINT,
		@Overflow TINYINT

	SELECT	@Index = 1,
		@MaxIndex = DATALENGTH(@Data),
		@SUM = 0

	WHILE @Index <= @MaxIndex
		SELECT	@SUM = (16 * @SUM) ^ SUBSTRING(@Data, @Index, 1),
			@Overflow = @SUM / 4294967296,
			@SUM = @SUM - @Overflow * 4294967296,
			@SUM = @SUM ^ @Overflow,
			@Index = @Index + 1

	IF @SUM > 2147483647
		SELECT @SUM = @SUM - 4294967296

	RETURN @SUM
END

Rate

Share

Share

Rate