将所有列数据更改为表中的大写

时间:2014-08-14 15:32:18

标签: sql sql-server-2012

以下语句返回可以是字符串值的所有字段名称。我现在需要将每个字段数据更改为大写。

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

这是更新声明。

Update Plats
 set col1 = UPPER(col1)

如何让col1成为第一个语句的列表,因此它会一次运行所有列,而不是每次更改名称。

3 个答案:

答案 0 :(得分:0)

如果是一次性动作,你可以做

select 'update ' + table_name + ' set ' + column_name + ' = UPPPER(' + column_name + ');')
from information_schema.columns
where data_type in ('char', 'nchar', 'varchar', 'nvarchar') AND table_name = 'plats';

在dbms管理员工具(可能是ssms)中执行此操作,复制/粘贴结果并执行它。

否则,您需要一个带有动态sql的存储过程。

答案 1 :(得分:0)

select 'update ' + table_name + ' set ' + column_name + '= upper(' + column_name + ');'
from information_schema.columns
where data_type in ('char', 'nchar', 'varchar', 'nvarchar') 
  AND table_name = 'plats';

此查询应返回所需的更新语句。结果应该作为SQL语句执行。我不认为这可以在一个单一的陈述中完成。

答案 2 :(得分:0)

使用像这样的组连接类型查询将生成单个更新语句

DECLARE @qry NVARCHAR(MAX)

SELECT @qry = 'UPDATE plats SET' + STUFF(CAST((
    SELECT ', ' + QUOTENAME(COLUMN_NAME) + ' = UPER(' + QUOTENAME(COLUMN_NAME) + ')'
    FROM information_schema.columns
    WHERE data_type in ('char', 'nchar', 'varchar', 'nvarchar') AND table_name = 'plats'
    FOR XML PATH('')
) AS VARCHAR(MAX)), 1, 1, '')

PRINT @qry
-- EXEC(@qry)