Sql 将表中的所有列数据更改为大写
下面的语句返回可以是字符串值的所有字段名。我现在需要将每个字段的数据改为大写Sql 将表中的所有列数据更改为大写,sql,sql-server-2012,Sql,Sql Server 2012,下面的语句返回可以是字符串值的所有字段名。我现在需要将每个字段的数据改为大写 select column_name from information_schema.columns where data_type in ('char', 'nchar', 'varchar', 'nvarchar') AND table_name = 'plats'; 这是update语句 Update Plats set col1 = UPPER(col1) 如何使col1从第一条语句变成列表,这样它将一次
select column_name from information_schema.columns
where data_type in ('char', 'nchar', 'varchar', 'nvarchar') AND table_name = 'plats';
这是update语句
Update Plats
set col1 = UPPER(col1)
如何使col1从第一条语句变成列表,这样它将一次运行所有列,而不是每次更改名称。如果是一次性操作,您可以这样做
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的存储过程
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';
此查询应返回所需的update语句。结果应作为SQL语句执行。我不认为这可以在一条语句中完成。使用类似于so的group concat类型查询将生成一条update语句
Update Plats
set col1 = UPPER(col1)
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)
我个人建议使用SQL Server中的目录视图而不是信息模式,原因有很多,但在这种情况下,最相关的一个原因是无法使用信息模式.COLUMNS来识别计算列,因此您可能会尝试更新一个计算列,这将失败。这些可以在sys.columns中通过is_computed字段识别,因此您可以从更新中排除它们。