Загрузка данных


IF CONVERT(varbinary(max),@actual)
   <> CONVERT(varbinary(max),@expected)
BEGIN
    DECLARE @diffPos int = 1;
    DECLARE @compareLength int =
        CASE
            WHEN DATALENGTH(@actual) > DATALENGTH(@expected)
                THEN DATALENGTH(@actual) / 2
            ELSE DATALENGTH(@expected) / 2
        END;

    WHILE @diffPos <= @compareLength
    BEGIN
        IF CONVERT(varbinary(max), SUBSTRING(@actual, @diffPos, 1))
           <> CONVERT(varbinary(max), SUBSTRING(@expected, @diffPos, 1))
            BREAK;

        SET @diffPos += 1;
    END;

    SELECT
        @@SERVERNAME AS serverName,
        DB_NAME() AS databaseName,
        @old AS objectName,
        DATALENGTH(@actual) AS actualBytes,
        DATALENGTH(@expected) AS expectedBytes,
        @diffPos AS firstDifference,
        UNICODE(SUBSTRING(@actual, @diffPos, 1)) AS actualCharacterCode,
        UNICODE(SUBSTRING(@expected, @diffPos, 1)) AS expectedCharacterCode,
        SUBSTRING(
            @actual,
            CASE WHEN @diffPos > 100 THEN @diffPos - 100 ELSE 1 END,
            400
        ) AS actualFragment,
        SUBSTRING(
            @expected,
            CASE WHEN @diffPos > 100 THEN @diffPos - 100 ELSE 1 END,
            400
        ) AS expectedFragment;

    SET @message =
        N'Definition differs from supplied snapshot: ' + @old;
    THROW 51916, @message, 1;
END;