Я нашел сценарий, где у меня есть временная таблица со столбцом varchar(20)
, и я хочу проверить длину строки при ее обновлении.
CREATE TABLE #tmpTest
(
code1 VARCHAR(20)
)
Этот код вызывает
, данные будут усечены
Ошибка:
DECLARE @CODE VARCHAR(10) = '0123456789';
UPDATE #tmpTest
SET code1 = '0123456789' + '/' + @CODE -- 21 chars
WHERE DATALENGTH('0123456789' + '/' + @CODE) <= 20;
Принимая во внимание:
DECLARE @CODE VARCHAR(10) = '0123456789';
IF DATALENGTH('0123456789' + '/' + @CODE) <= 20
BEGIN
UPDATE #tmpTest
SET code1 = '0123456789' + '/' + @CODE -- 21 chars
END
и
DECLARE @CODE VARCHAR(10) = '0123456789';
UPDATE #tmpTest
SET code1 = CASE
WHEN DATALENGTH('0123456789' + '/' + @CODE) <= 20
THEN '0123456789' + '/' + @CODE
END
Не выбрасывайте эту ошибку.
Мне любопытно понять, почему это происходит. Это связано с компилятором / оптимизатором, или я что-то не так делаю?