我有一个名为 Fruits 的下表。
ID English Spanish German
1 Apple Applice Apple-
2 Orange -- --
如果程序通过 1 和英语,我必须返回“Apple”。我怎么能为此编写sql查询?谢谢你。
我有一个名为 Fruits 的下表。
ID English Spanish German
1 Apple Applice Apple-
2 Orange -- --
如果程序通过 1 和英语,我必须返回“Apple”。我怎么能为此编写sql查询?谢谢你。
select
ID,
case @Lang
when 'English' then English
when 'Spanish' then Spanish
end as Name
from Fruits
where ID = @ID;
或者,如果您有多个列可供选择,则可以使用 apply 这样您就不必编写多个 case 语句
select
F.ID,
N.Name,
N.Name_Full
from Fruits as F
outer apply (values
('English', F.English, F.English_Full),
('Spanish', F.Spanish, F.Spanish_Full)
) as N(lang, Name, Name_Full)
where F.ID = @ID and N.lang = @lang
首先你应该规范化数据库,以支持多语言,这意味着将表拆分为 2
表:
Fruit
(水果ID、通用名称等)Languages
(LanguageID、LanguageName 等)FruitTranslations
(水果 ID、语言 ID、本地化名称)那么查询将只是对表 FruitTranslations 的简单查询...
如果您仍然想要查询,那么您可以使用动态 SQL,
DECLARE @cmd VARCHAR(MAX)
SET @Cmd = 'SELECT ' + @Language +
' FROM Fruits WHERE ID = ''' + CONVERT(VARCHAR, @Id) + ''''
EXEC(@Cmd)
试试这个——
DECLARE
@Lang VARCHAR(10) = 'English'
, @ID INT = 1
DECLARE @SQL NVARCHAR(MAX)
SELECT @SQL = '
SELECT ' + @Lang + '
FROM dbo.Fruits
WHERE ID = ' + CAST(@ID AS VARCHAR(4))
PRINT @SQL
EXEC sys.sp_executesql @SQL
您可以使用存储过程来做到这一点,因为在存储过程中您可以使用“if else”条件。前任:
@ID as int,@Lang as varchar(50)
if @Lang = 'English'
begin
select ID,English from Fruits where ID = @ID;
end
else
if @Lang = 'Spanish'
begin
select ID,Spanish from Fruits where ID = @ID;
end
...