【问题标题】:Transform an entire database varchar to uppercase将整个数据库 varchar 转换为大写
【发布时间】:2019-03-13 05:42:42
【问题描述】:

本周风险部门告诉我们,我们的系统只能接受大写文本。我们进行了将近 6 个月的生产,最初的项目没有考虑到这一点。有没有简单的方法将数据库的所有 varchars 转换为大写?

【问题讨论】:

  • 你如何定义“容易”?
  • 不,我真正需要的是像 css' 'text-transform: uppercase' 到整个数据库的列/行/字段。
  • “简单”是我不需要为每个表和列执行“UPDATE table SET column = UPPER(column)”的事情
  • 为每个 varchar 表/列生成更新语句有什么难的?编写一个使用INFORMATION_SCHEMA.COLUMNSsys.columns 生成SQL 的查询,然后运行它。

标签: sql-server sql-server-2012


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2017-01-23
    • 2014-08-16
    • 2016-12-16
    • 2016-07-14
    • 2013-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多