2014-04-14 20 views
1

我有這個存儲過程,如何把select語句返回到一個變量

Create procedure [dbo].[Craping_GetFruitCrapedOrNot] 
(
    @FruitID int, 
    @CrateID int, 
    @FruitName varchar(100) 
) 
AS 
    SELECT CASE WHEN EXISTS 
    (
    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) 
) 
    THEN 'False' 
    ELSE 'True' 
    END AS FruitNotCraped 
GO 

現在如果再存在,而不是返回false THEN 'False'我想回到一切從select語句返回的,不知道怎麼雖然嗎?

Then return 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) 
+0

爲什麼不直接從查詢中返回結果?如果什麼都不存在,你將不會獲得行。而且,也許你真的想要一個用戶定義的函數而不是存儲過程。 –

+0

@GordonLinoff,因爲它已被用於我無法觸摸的類型化數據集中 – Mathematics

回答

3
DECLARE @Craped NVARCHAR(50) 

SELECT  @Craped = CONVERT(NVARCHAR(50), Craping.CRAPED) 
FROM   Fruits 
     INNER JOIN Craping 
     ON Fruits.ID = Craping.FruitID 
WHERE  
    (Fruits.FruitTable = @FruitName) 
    AND (Craping.FruitID = @FruitID) 
    AND (Craping.CrateID = @CrateID) 

SELECT CASE 
      WHEN @@ROWCOUNT = 0 THEN 'True' 
      ELSE @Craped 
     END AS [FruitNotCraped] 

注:

  • 我的@@ ROWCOUNT,而不是@Craped測試IS NULL以防萬一它是可能的Craping.CRAPED領域可能爲NULL作爲有效值。
+0

craped是一個int – Mathematics

+0

@CustomizedName:我已經更新了我的答案,以包含解決此問題的註釋。不過,我可以再次更新來整合這些信息。 –

+0

謝謝,但是我收到異常 - 轉換varchar值'True'爲數據類型int時轉換失敗。當沒有記錄存在,否則工作正常 – Mathematics