抱歉,标题含糊不清,但我真的不知道给这个问题起什么标题:
我有以下结果集:
ID Field FieldValue Culture
1 Color Groen nl-NL
2 Taste Kip nl-NL
3 Color Green en-GB
4 Taste Chicken en-GB
5 Color Green en
6 Taste Chicken en
我想模仿 ASP.Net 的资源选择方式,用户文化 (nl-NL)
SELECT Field, FieldValue FROM Tbl WHERE Culture = 'nl-NL'
或者当特定文化没有结果时,尝试父文化(nl)
SELECT Field, FieldValue FROM Tbl WHERE Culture = 'nl'
或者当没有父文化的结果时,尝试默认的文化(en)
SELECT Field, FieldValue FROM Tbl WHERE Culture = 'en'
如何将这些 SELECT 语句合并到一个 T-SQL 语句中?
我正在使用 LINQ,因此 LINQ 表达式会更强大。
OR 语句不起作用,因为我不想要混合文化。
ORDER BY 语句无济于事,因为它会为每种文化返回多条记录。
输出可能看起来像(nl-NL):
Color Groen
Taste Kip
或(en-GB/en):
Color Green
Taste Chicken
最佳答案
所以,这里的代码完全符合您示例中所写的内容。 您应该在客户端代码中确定特定文化 (nl-NL)、中性文化 (nl) 和回退文化 (en),并将这些值提供给 SQL。
SELECT Field, FieldValue FROM Tbl WHERE Culture = (
SELECT TOP 1 Culture FROM (
SELECT 1 as n, Culture FROM Tbl WHERE Culture = 'nl-NL'
UNION
SELECT 2, Culture FROM Tbl WHERE Culture = 'nl'
UNION
SELECT 3, Culture FROM Tbl WHERE Culture = 'en'
) cultures
ORDER BY n
)
您确定需要特定文化的整个翻译表,而不是每个字符串的翻译吗?如果您在 en 中有字符串 A 和 B,但在 nl-NL 中只有字符串 A,该怎么办?
关于sql-server - T-SQL Where 语句 - 或者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2674721/