GLOBAL UpPerCaSe SQL

时间:2011-04-04 12:20:40

标签: sql-server tsql

我可以将数据库中的所有文本全局转换为UPPER CASE。 这只是测试数据,但很多是20,000,000行145列('char','nchar','varchar','nvarchar')

有没有人有关于如何做到这一点的想法......? 我知道你可以使用UPPER

Update table
set col1 = UPPER(col1)

但这限制了它的个别专栏 但是如何使用信息架构视图创建游标并循环遍历所有字符类型列以确定要更新的列:

select table_name, column_name from information_schema.columns
where data_type in ('char', 'nchar', 'varchar', 'nvarchar')

表中没有FK 感谢

1 个答案:

答案 0 :(得分:3)

如果它是一个hacky one-off只是让查询吐出一些copy / pasteable SQL;

SELECT 'update [' + p1.table_name + '] set ' +
(SELECT 
    CASE WHEN ROW_NUMBER() OVER (order by column_name) > 1 THEN ',' ELSE '' END
    + '[' + column_name + ']=upper([' + column_name + '])'
    FROM information_schema.columns p2 
    WHERE p2.table_name = p1.table_name and p2.data_type in ('char', 'nchar', 'varchar', 'nvarchar')
    ORDER BY table_name
    FOR XML PATH('')
) AS blah
FROM information_schema.columns p1
    WHERE p1.data_type in ('char', 'nchar', 'varchar', 'nvarchar')
GROUP BY table_name;

会吐出来的;

update [Tbl] set [F1]=upper([F1]),[F2]=upper([F2])