Sql 使用单个查找表更新多列

Sql 使用单个查找表更新多列,sql,sql-server,database,azure,powerbi,Sql,Sql Server,Database,Azure,Powerbi,我正在使用Azure SQL数据库使用Power BI创建报告。我需要用越南语创建一个报告,我已经复制了我的数据库,现在正在尝试将英文文本数据翻译成越南语。为了实现这一点,我创建了一个查找表,其中包含英文文本以及两个不同列中的相应翻译。 我的数据表可以有两列或更多列,其中包含英文文本,我应该在查找表中查找这些文本,以获取越南语文本,并用翻译后的文本替换更新英文数据。 数据表(我可以有多个英文数据表): 查阅表格(仅一个查阅表格,其中包含所有表格中的所有英文文本): 有没有办法一次更新所有表格?还

我正在使用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*/)