返回存储过程

时间:2015-06-29 09:55:16

标签: sql-server stored-procedures

我正在尝试使用两种语言的博客和类别在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

我真的很感激一些提示。这是我第一次在这里发帖提问,而且我不太确定这是怎么回事。如果这是某个转贴,不好意思。

1 个答案:

答案 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