我有两个SQL Server表,一个是我的目标表(LocaleStringResource),另一个是源表(TempResourceSunil)。
源表包含以下列:TempResourceSunil
[ID], [LanguageId], [ResourceName], [ResourceValue], [Burmese], [Unicode]
并且目标表的列是LocaleStringResource
[Id], [LanguageId], [ResourceName], [ResourceValue] 我想[ResourceValue]基于[ResourceName]源文件更新目标表。
例:
[ResourceName] = 'Account.AccountActivation'
表示我想检查它是否[ResourceValue]在LocaleStringResource表中有对应的缅甸语(如果不存在),我将从TempResourceSunil缅甸语列中获取它,并LocaleStringResource使用language 将其插入id =2。
同样,如果[ResourceValue]对Unicode(语言ID = 3)不存在为[ResourceName] = 'Account.AccountActivation'手段我想插入[ResourceValue]从TempResourceSunil用语言id = 3。
有任何SQL专家可以帮助我吗?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
当然,你可以使用MERGE
语句或者IF NOT EXISTS
结合INSERT
来实现这个需求。这里我提供一个使用MERGE
的示例,它允许你根据条件执行插入或更新操作。
首先,确保你的源表(TempResourceSunil)中的缅甸语和Unicode列与目标表(LocaleStringResource)的[ResourceValue]有直接可比较的数据结构。接下来是基于你的描述构建的SQL语句:
MERGE LocaleStringResource AS Target
USING (
SELECT
[ResourceName],
CASE
WHEN T.[Burmese] IS NOT NULL THEN T.[Burmese]
ELSE T.[Unicode]
END AS ResourceValue,
CASE
WHEN T.[Burmese] IS NOT NULL THEN 2 -- 缅甸语的LanguageId
ELSE 3 -- Unicode的LanguageId
END AS LanguageId
FROM TempResourceSunil AS T
) AS Source
ON Target.ResourceName = Source.ResourceName AND Target.LanguageId = Source.LanguageId
WHEN NOT MATCHED BY TARGET THEN
INSERT ([ResourceName], [LanguageId], [ResourceValue])
VALUES (Source.ResourceName, Source.LanguageId, Source.ResourceValue);
这段SQL做了以下几件事: 1. 它从TempResourceSunil
表中选择数据,同时决定每个ResourceName
应该使用的ResourceValue
和对应的LanguageId
。 2. 使用CASE
表达式来判断是否使用缅甸语还是Unicode作为ResourceValue
,并相应地分配LanguageId
。 3. MERGE
语句会检查LocaleStringResource
表中是否有匹配的ResourceName
和LanguageId
组合。 4. 如果没有找到匹配项(即WHEN NOT MATCHED BY TARGET
),则执行插入操作,将源表中的数据插入到目标表中。
请根据你的实际数据库环境调整上述脚本,特别是检查数据类型和列名是否完全对应。在运行任何修改数据的操作之前,建议先在一个安全的测试环境中验证SQL脚本,以避免意外的数据更改。