Я не знаю, является ли это наилучшим из возможных подходов, но иногда я им пользуюсь.Он использует sys.columns представление каталога, генерирует динамический оператор с помощью предложения FOR XML и выполняет сгенерированный оператор с sp_executesql .
DECLARE
@stm nvarchar(max),
@err int
SELECT @stm = (
SELECT CONCAT(
'UPDATE ', OBJECT_NAME(c.OBJECT_ID),
' SET ',
c.name,
' = UPPER(',
c.name, '); ')
FROM sys.columns AS c
JOIN sys.types AS t ON c.user_type_id = t.user_type_id
WHERE t.name = 'varchar'
ORDER BY c.OBJECT_ID
FOR XML PATH('')
)
EXEC @err = sp_executesql @stm
IF @err = 0
PRINT 'OK'
ELSE
PRINT 'Error'