sql - 使用单个查找表更新多列
问题描述
我正在使用 Azure SQL 数据库使用 Power BI 创建报告。我需要创建一个越南语的报告,我已经为其复制了我的数据库,现在尝试将英语文本数据翻译成越南语。为此,我创建了一个查找表,其中包含英文文本以及两个不同列中的相应翻译。我的数据表可以有两个或多个包含英文文本的列,我应该在查找表中查找以获取越南语文本并将更新的英文数据替换为翻译后的数据。数据表(我可以有多个带有英文数据的表):
+-------------+-------------+-------------+----------------+-----------------+
| id | eng_col1 | eng_col2 | eng_col3 | eng_col4 |
| | | | | |
+----------------------------------------------------------------------------+
| 1 | hello | | hello | yes |
| | | no | | |
+----------------------------------------------------------------------------+
| 2 | | no | hello | |
| | world | | | no |
+----------------------------------------------------------------------------+
| 3 | yes | hello || yes | world |
+-------------+-------------+------------------------------+-----------------+
查找表(只有一个查找表,其中包含所有表中存在的所有英文文本):
+-------------+--------------
| english | vietnamese |
| | |
+---------------------------+
| yes | Đúng |
| | |
+---------------------------+
| no | |
| | Không |
+---------------------------+
| hello |xin chào |
+---------------------------+
| world | thế giới |
| | |
+-------------+-------------+
有没有办法一次性更新所有表?还是我需要分别为每个表编写更新查询?TIA
解决方案
在不知道您的完整数据模型的情况下,您可以尝试两件事
选项1
如果所有列都具有相同的名称,您可以编写 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
和生成 SQL 语句sys.columns
。例子:
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*/)
这个查询的输出,可以用来在多个表上执行多个语句。
推荐阅读
- c - 了解 IP 生存时间与多个原始套接字上的 recvfrom 的关系
- c# - 进入函数的能力取决于调用它的托管函数
- swift - 如果在剪辑结束之前开始播放,AudioKit AKClipPlayer 会崩溃
- regex - 替换 Json 文件中的分隔符字符串
- opengl - PBR 纹理和 Phong Shading 模型材质参数
- html - 我从服务器下载了一个项目,但图像没有以正确的路径显示
- elasticsearch - ElasticSearch:错误的相关顺序
- c# - 为什么成员变量不遵循递归返回规则?
- javascript - 当您不知道触发了哪些事件时,如何在更改输入字段的值后触发单击/更改事件
- wso2 - 带传感器的逻辑模式