我有这样的表:
语言表中的数据:
等文本表中的数据:
如果请求的语言存在,我必须返回文本;如果默认语言不存在,我必须返回文本。是否可以在一个查询中做到这一点(不while
,请)?
代码:
DECLARE @CommentId bigint = 1
--DECLARE @LanguageCode nvarchar(2) = 'en' -- "english text" returns
DECLARE @LanguageCode nvarchar(2) = 'ua' -- nothing at this moment
SELECT
t.CommentId
,t.TextId
,t.[Text]
,t.LanguageId
,RequestedLanguageId = @LanguageCode
FROM dbo.common_Text t
INNER JOIN dbo.common_LanguageType l
ON t.LanguageId = l.LanguageId
WHERE l.Code = @LanguageCode
AND t.CommentId = @CommentId
谢谢你。
添加:
如果代码请求“ua”(乌克兰语)文本,而这不是该语言的任何文本,那么它将搜索俄语文本。如果找到 - 好的,如果没有找到英文文本。语言列表可能会有所不同。
使用递归 CTE,此查询构建了一个包含所有语言的表,这些语言在其默认链中的某处指向具有所需注释的语言。它在具有所需注释的第一个默认值旁边显示每种语言。然后过滤此表,为您提供所选语言的第一个可用文本。
试着跑步
如果您想了解递归 CTE 在做什么。我已经上传了一个脚本来创建表,插入一些示例数据,然后将上面的代码运行到 gist。