以下语句返回可以是字符串值的所有字段名称。我现在需要将每个字段数据更改为大写。
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成为第一个语句的列表,因此它会一次运行所有列,而不是每次更改名称。
答案 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)