Вы можете попробовать это:
Я настроил макет для имитации вашей проблемы
DECLARE @tbl TABLE(SomeValue VARCHAR(10),TheValueAsBin VARBINARY(MAX));
INSERT INTO @tbl(SomeValue) VALUES(NULL),(''),('1'),('22'),('333'),('4444');
- Этим я установил второй столбец для соответствующегоVARBINARY
значения
UPDATE @tbl SET TheValueAsBin = CAST(SomeValue AS VARBINARY(MAX));
- Проверить промежуточный результат
SELECT *
,DATALENGTH(TheValueAsBin) AS DataLengthOfYourBinValue
FROM @tbl
/*
SomeValue TheValueAsBin DataLengthOfYourBinValue
NULL NULL NULL
0x 0
1 0x31 1
22 0x3232 2
333 0x333333 3
4444 0x34343434 4
*/
- Теперь я обновляю значение VARBINARY
с помощью CASE
, используя %
(по модулю) оператор для переключения между нечетными и четными числами.
UPDATE @tbl SET TheValueAsBin = TheValueAsBin + CASE WHEN DATALENGTH(TheValueAsBin)%2 = 1 THEN 0x0 ELSE 0x END
- Проверка конечного результата
SELECT *
,DATALENGTH(TheValueAsBin) AS DataLengthOfYourBinValue
FROM @tbl
Результат
SomeValue TheValueAsBin DataLengthOfYourBinValue
NULL NULL NULL
0x 0
1 0x3100 2
22 0x3232 2
333 0x33333300 4
4444 0x34343434 4