Преобразовать всю базу данных varchar в верхний регистр - PullRequest
0 голосов
/ 08 октября 2018

На этой неделе подразделение управления рисками сообщило нам, что наша система должна принимать только тексты в верхнем регистре.Мы находимся в производстве почти 6 месяцев, и это не было предусмотрено в первоначальном проекте.Есть ли какой-нибудь простой способ преобразовать все varchars базы данных в верхний регистр?

1 Ответ

0 голосов
/ 08 октября 2018

Я не знаю, является ли это наилучшим из возможных подходов, но иногда я им пользуюсь.Он использует 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'
...