根据源表数据中的条件更新或插入SQL Server目标表数据

时间:2019-12-19 06:40:47

标签: sql sql-server join sql-update sql-insert

我有两个SQL Server表,一个是我的目标表(LocaleStringResource),另一个是源表(TempResourceSunil)。

源表具有以下列:TempResourceSunil

[ID], [LanguageId], [ResourceName], [ResourceValue], [Burmese], [Unicode]

,目标表的列为LocaleStringResource

[Id], [LanguageId], [ResourceName], [ResourceValue]

我想根据源文件中的[ResourceValue]更新目标表[ResourceName]

示例:

[ResourceName] = 'Account.AccountActivation' 

意味着我要检查它在[ResourceValue]表中是否有对应的缅甸LocaleStringResource,如果它不存在,我将从TempResourceSunil和Burmese列中获取并将其插入{{1 }},语言为LocaleStringResource

如果id =2的Unicode(语言ID = 3)的[ResourceValue]不存在,则表示我想从[ResourceName] = 'Account.AccountActivation'插入[ResourceValue]并使用语言TempResourceSunil

任何SQL专家都能帮助我吗?

1 个答案:

答案 0 :(得分:0)

您给出的描述并不是很充实,但是,您想使用Case语句。 CASE STATEMENT INFO 一个case语句可以具有多个WHEN,以覆盖多个逻辑语句。您甚至可以在另一个内部拥有一个。对于这种情况,我真的不会这么做。 下面的示例只是一个简单的版本。

如果l。[ResourceValue]为空并且l。[ResourceName] ='Account.AccountActivation',则对列l。[ResourceValue]使用T. [Burmese]的值。 ELSE表示如果否,则case语句为true时,请使用此值。

还请注意,如果尝试使用第二个字符串列中第一个表中的INT值,则需要将其强制转换为varchar。

测试一下您的逻辑和案例陈述,然后看看您的情况如何。

SELECT
l.[Id], 
l.[LanguageId],
l.[ResourceName], 
CASE WHEN l.[ResourceName] =  'Account.AccountActivation' and l.[ResourceValue] is null then T.[Burmese]
else l.[ResourceValue] end as [ResourceValue],
T.[ID],
T.[LanguageId],
T.[ResourceName],
T.[ResourceValue],
T.[Burmese],
T.[Unicode]
FROM  LocaleStringResource as L
LEFT JOIN TempResourceSunil t on (t.ID = L.ID) and (t.[LanguageId] = l.[LanguageId])