我有两个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专家都能帮助我吗?
答案 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])