Ошибка, которую вы получаете, является, по крайней мере, правильной. Но из вашего примера я не могу определить, является ли преобразование правильным или нет.
По сути, где-то в вашем CHAR (21). Существует значение, которое больше, чем int32, или SQL Тип сервера int, по значению. Это значение: 2 147 483 648. 4 000 009 123 больше этого максимального значения, указанного в сообщении об ошибке.
СУБД с помощью оператора where попытается выполнить операцию и сравнить все записи, что приведет к переполнению. Вместо этого вы можете сделать сравнение строк. Или попробуйте явное преобразование и преобразуйте его в bigint.
WHERE CONVERT(BIGINT, (REPLACE(LEFT( LM301.DOCNUMBR, CHARINDEX('-', LM301.DOCNUMBR)), '-', ''))) = 516542
Он выполняет неявное приведение к INT, потому что это ваш тип сравнения, а затем переполняется. Сделав явное преобразование, вы сможете вместо этого определить тип данных.
По сути, что происходит:
IF ('21474836480' >= 100) --Implicit conversion: Error and prints false
PRINT 'True'
ELSE
PRINT 'False'
IF ('214748364' >= 100) --Implicit Conversion: True
PRINT 'True'
ELSE
PRINT 'False'
IF (CONVERT(BIGINT, '21474836480') >= 100) --Explicit Conversion: Prints True
PRINT 'True'
ELSE
PRINT 'False'
Поэтому перенос значения в явное преобразование должен исправить вашу ошибку.