Это проблема времени компиляции и времени исполнения. Ошибка происходит во время компиляции в базе данных, где значение не может быть обновлено.
Вы можете обойти это, используя динамический SQL:
IF EXISTS( SELECT 1 FROM sys.columns
WHERE Name = N'IsReadOnly'
AND Object_ID = Object_ID(N'dbo.TableA')
AND is_computed = 0
)
BEGIN
EXEC sp_execute_sql N'
Update TableA
Set IsReadOnly = @IsReadOnly
Where Id = @ID',
N'@IsReadOnly int, @ID int', -- guessing at the types
@IsReadOnly=@IsReadOnly, @ID=@ID;
END
Однако более простым методом может быть блок TRY
/ CATCH
:
BEGIN TRY
Update TableA
Set IsReadOnly = @IsReadOnly
Where Id = @ID ;
END TRY
BEGIN CATCH
-- Check for the particular error and do something when that occurs
END CATCH;