Вам нужно использовать CAST
дважды - один раз, чтобы сделать столбец Value
INT
, чтобы вы могли вычесть из него 1, а затем вернуться к VARCHAR(x)
:
update dbo.Fields
set Value = CAST((CAST(Value AS INT) - 1) AS VARCHAR(20))
from dbo.Fields f
inner join dbo.FTypes ft ON ft.ID = f.ID_FT
where ft.Name = 'Field Count'
and f.ID_Project = 186
Кроме того, я бы рекомендовал всегда использовать префикс dbo.
для всех ваших объектов базы данных, и я бы всегда выступал за новый стандартный синтаксис JOIN ANSI, который является более выразительным (более понятным для чтения и понимания) ипомогает избежать нежелательных декартовых произведений (забывая указать условие JOIN в предложении WHERE ....)