存储过程SELECT语句中的结果处理

时间:2016-03-24 10:26:47

标签: sql sql-server stored-procedures

我有一个看起来像的存储过程:

        AS
BEGIN
    DECLARE @result nvarchar(max)
    SELECT @result = COALESCE(@result + ', ', '') + ingredient.NAME
      FROM MEAL
 LEFT JOIN MEAL meal ON MEAL.ID= ingredient.MEAL_ID
      JOIN INGREDIENT ingredient ON ingredient.INGREDIENT_ID = problem_type.GID
     where MEAL.ID=@ID
RETURN @result
END

膳食可能含有成分(面粉,肉等)。让我们说,我不检查成分(问题很复杂,这是一个例子)和那顿饭可以含有面粉,面粉(2X)和肉类。 当我想在app中显示结果时,此存储过程将返回“面粉,面粉,肉”字符串。我不会那样,我想要“面粉,肉”。

如何在存储过程中执行此操作? 有没有办法在SELECT(?)中添加一些if语句。例如,在C#中,我可以拆分字符串,而不是检查是否有重复项,但存储过程中是否可以这样做?

1 个答案:

答案 0 :(得分:1)

一种方法是使用子查询来获取不同的值,然后在外部查询中将它们连接起来:

BEGIN
    DECLARE @result nvarchar(max);

    SELECT @result = COALESCE(@result + ', ', '') + i.NAME
    FROM (SELECT DISTINCT i.NAME
          FROM INGREDIENT i
          WHERE i.MEAL_ID = @ID
         ) i
    RETURN @result
END

注意:我在查询中删除了JOIN个。您有两次MEAL表,我认为这是一个错误 - ON条件注定要失败,problem_type未定义。更重要的是,它们不是必需的,因为INGREDIENT具有MEAL_ID条款的WHERE

此外,如果没有额外的JOIN,您可能会发现DISTINCT不是必需的。