Sql 使用单个查找表更新多列
我正在使用Azure SQL数据库使用Power BI创建报告。我需要用越南语创建一个报告,我已经复制了我的数据库,现在正在尝试将英文文本数据翻译成越南语。为了实现这一点,我创建了一个查找表,其中包含英文文本以及两个不同列中的相应翻译。 我的数据表可以有两列或更多列,其中包含英文文本,我应该在查找表中查找这些文本,以获取越南语文本,并用翻译后的文本替换更新英文数据。 数据表(我可以有多个英文数据表): 查阅表格(仅一个查阅表格,其中包含所有表格中的所有英文文本): 有没有办法一次更新所有表格?还是需要分别为每个表编写更新查询?Sql 使用单个查找表更新多列,sql,sql-server,database,azure,powerbi,Sql,Sql Server,Database,Azure,Powerbi,我正在使用Azure SQL数据库使用Power BI创建报告。我需要用越南语创建一个报告,我已经复制了我的数据库,现在正在尝试将英文文本数据翻译成越南语。为了实现这一点,我创建了一个查找表,其中包含英文文本以及两个不同列中的相应翻译。 我的数据表可以有两列或更多列,其中包含英文文本,我应该在查找表中查找这些文本,以获取越南语文本,并用翻译后的文本替换更新英文数据。 数据表(我可以有多个英文数据表): 查阅表格(仅一个查阅表格,其中包含所有表格中的所有英文文本): 有没有办法一次更新所有表格?还
TIA在不了解完整数据模型的情况下,您可以尝试以下两种方法 选项1 如果所有列都具有相同的名称,则可以使用
sp_MsForEachTable
例如:
exec sp_MsForEachTable 'UPDATE x SET Column = lt.Vietnamese FROM ? x INNER JOIN lookupTable lt on lt.English = x.Column'
选项2
您还可以基于sys.tables
和sys.columns
生成SQL语句。例如:
SELECT CONCAT('UPDATE x SET ', QUOTENAME(c.Name) , ' = lt.Vietnamese FROM ' , QUOTENAME(SCHEMA_NAME(t.Schema_Id)), '.', QUOTENAME(t.Name), ' x
INNER JOIN lookupTable lt on lt.English = x.', QUOTENAME(c.Name))
FROM sys.Tables t
INNER JOIN sys.Columns c on c.Object_Id = t.Object_Id
-- Or use a different custom condition
WHERE t.Name IN (/*Tables you want to update*/)
AND c.Name IN (/*Columns you want to update*/)
此查询的输出,可用于在多个表上执行多个语句。您需要为每个表编写一个查询。。。
exec sp_MsForEachTable 'UPDATE x SET Column = lt.Vietnamese FROM ? x INNER JOIN lookupTable lt on lt.English = x.Column'
SELECT CONCAT('UPDATE x SET ', QUOTENAME(c.Name) , ' = lt.Vietnamese FROM ' , QUOTENAME(SCHEMA_NAME(t.Schema_Id)), '.', QUOTENAME(t.Name), ' x
INNER JOIN lookupTable lt on lt.English = x.', QUOTENAME(c.Name))
FROM sys.Tables t
INNER JOIN sys.Columns c on c.Object_Id = t.Object_Id
-- Or use a different custom condition
WHERE t.Name IN (/*Tables you want to update*/)
AND c.Name IN (/*Columns you want to update*/)