我正在尝试使用两种语言的博客和类别在ASP.NET中开发应用程序。其中一项功能是以特定语言返回类别的名称。
并非所有类别都有两种语言。有些人有英语,有些人有意大利语,有些人都有。这是执行我正在谈论的选择的功能。
DECLARE @Name NVARCHAR(250)
IF EXISTS(SELECT Name = Coalesce(BlogCategoryTranslation.Name, ' ')
FROM BlogCategoryTranslation
WHERE BlogCategoryID = @CategoryID AND LanguageID = @LanguageID)
BEGIN
SET @Name = (SELECT Name
FROM BlogCategoryTranslation
WHERE BlogCategoryID = @CategoryID
AND LanguageID = @LanguageID)
END
ELSE
BEGIN
SET @Name = (SELECT TOP 1 Name
FROM BlogCategoryTranslation
WHERE BlogCategoryID = @CategoryID
AND LanguageID = @LanguageID);
END
RETURN @Name
下面是一个存储过程,它返回给定语言的类别名称。我想要的是总是返回一个类别。如果它不存在于特定语言中,我想用另一种语言显示记录。
这是否可能,如果是,为了做到这一点会有什么建议?
ALTER PROCEDURE [dbo].[BlogCategoryLanguage]
@BlogCategoryID INT,
@LanguageID INT
AS
BEGIN
SELECT
BlogCategoryID AS 'CategoryID',
Language.Name AS 'Language',
dbo.BlogNameCategoryByLanguage(1,1) as 'Name',
dbo.Blog_PublishedInCategory(1,BlogCategory.ID) AS 'Published'
FROM
BlogCategoryTranslation
INNER JOIN
BlogCategory ON BlogCategory.ID = BlogCategoryTranslation.BlogCategoryID
INNER JOIN
Language ON Language.ID = BlogCategoryTranslation.LanguageID
WHERE
BlogCategoryID = 1
END
我真的很感激一些提示。这是我第一次在这里发帖提问,而且我不太确定这是怎么回事。如果这是某个转贴,不好意思。
答案 0 :(得分:1)
您可以CASE
使用基于ORDER BY
的{{1}} {/ 1}}。
TOP 1
会优先使用ORDER BY CASE WHEN LanguageID = @LanguageID THEN 1 ELSE 2 END ASC
语言。如果该语言不适用于当前LanguageID = @LanguageID
,则会选择该类别的随机语言。
像这样。
@Category
修改强>
您可以在主存储过程中使用相同的DECLARE @Name NVARCHAR(250)
SELECT @Name = TOP 1 Name
FROM BlogCategoryTranslation
WHERE BlogCategoryID = @CategoryID
ORDER BY CASE WHEN LanguageID = @LanguageID THEN 1 ELSE 2 END ASC;
RETURN @Name
和ORDER BY
。
TOP 1