将整个数据库varchar转换为大写

时间:2018-10-08 14:12:25

标签: sql-server sql-server-2012

这周,风险部门告诉我们,我们的系统只能接受大写的文本。我们已经生产了将近6个月,而最初的项目并未考虑到这一点。有什么简单的方法可以将数据库的所有varchar转换为大写?

1 个答案:

答案 0 :(得分:5)

我不知道这是否是最好的方法,但有时会使用它。它使用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'