存储过程如果不存在记录

时间:2014-04-07 15:00:36

标签: sql sql-server-2008

我有这个存储过程,

Create procedure [dbo].[Craping_GetFruitCrapedOrNot]
(
    @FruitID int,
    @CrateID int,
    @FruitName varchar(100)
)
AS
    SELECT Craping.Craped
    FROM Fruits 
    INNER JOIN Craping ON Fruits.ID = Craping.FruitID
    WHERE     
        (Fruits.FruitTable = @FruitName) 
        AND (Craping.FruitID = @FruitID) 
        AND (Craping.CrateID = @CrateID)
GO

现在我想检查Fruits表是否有提供水果名称的水果,如果没有水果则返回true。

如果FruitsCraping表的内部联接没有FruitIDCrateIDFruitName的记录,则返回true而不是false。

我们要做的是只在水果被抓到并记录到桌子时才会变得虚假。

1 个答案:

答案 0 :(得分:1)

您可以使用IF EXISTS来确定行的存在,然后使用CASE WHEN将其作为您需要的结果进行投影,例如

Create procedure [dbo].[Craping_GetFruitCrapedOrNot]
(
    @FruitID int,
    @CrateID int,
    @FruitName varchar(100)
)
AS
  SELECT CASE WHEN EXISTS
  (
     SELECT     1
     FROM         Fruits 
          INNER JOIN Craping 
          ON Fruits.ID = Craping.FruitID
     WHERE     
         (Fruits.FruitTable = @FruitName) 
         AND (Craping.FruitID = @FruitID) 
         AND (Craping.CrateID = @CrateID)
  ) 
  THEN 'False'
  ELSE 'True'
  END AS FruitNotCraped
GO   

你介意我问一个问题:什么是Craped Fruit? ;)

SqlFiddle here