2015-04-27 32 views
1

我想創建這個函數(變量名稱更改,以便允許命名錯誤,因爲測試時,原來沒有的功能正常工作),問題用「與」創造功能

CREATE FUNCTION [dbo].[GetQuality](@FruitID VARCHAR(200)) 
RETURNS varchar(200) 
AS 
BEGIN 
DECLARE @Result varchar(200) 

SET @Result = (

WITH 
latest AS 
(
    SELECT * FROM (SELECT TOP 1 * FROM Fruits_Crate WHERE FruitID like @FruitID ORDER BY ExpiryDate DESC) a 
), 
result AS 
(
    SELECT 
     latest.ExpiryDate as LatestExpiryDate, latest.Size as LatestSize, latest.Weight as LatestWeight, 
     previous.ExpiryDate as PreviousExpiryDate, previous.Size as PreviousSize, previous.Weight as PreviousWeight, 
     CASE SIGN((latest.Weight * latest.Size) - (previous.Weight * previous.Size)) 
      WHEN 1 THEN 'Increased' 
      WHEN 0 THEN 'Static' 
      WHEN -1 THEN 'Decreased' 
      ELSE 'No Previous Data' 
     END AS Movement 
    FROM (SELECT TOP 1 * FROM (SELECT TOP 2 * FROM Fruits_Crate WHERE FruitID like @FruitID ORDER BY ExpiryDate DESC) x ORDER BY ExpiryDate) previous 
    FULL OUTER JOIN latest ON previous.FruitID = latest.FruitID 
) 

SELECT result.Movement AS FruitMovement from result; 
) 

RETURN @Result 

END 

錯誤

消息156,級別15,狀態1,過程GetQuality,行 '與' 關鍵字近10 語法不正確。

消息319,級別15,狀態1,過程GetQuality,行 '與' 關鍵字近10 語法不正確。如果此語句是公用表表達式,xmlnamespaces子句或變更跟蹤上下文子句,則前面的語句必須以分號結尾。

消息102,級別15,狀態1,過程GetQuality 14行 附近有語法錯誤 ''。 '102',級別15,狀態1,過程GetQuality,行31'''附近語法不正確。

回答

4

我認爲你可以把任務向下移動,並在和之前放一個分號,所有的都應該是好的。

CREATE FUNCTION [dbo].[GetQuality](@FruitID VARCHAR(200)) 
RETURNS varchar(200) 
AS 
BEGIN 
DECLARE @Result varchar(200); 

WITH 
latest AS 
(
    SELECT * FROM (SELECT TOP 1 * FROM Fruits_Crate WHERE FruitID like @FruitID ORDER BY ExpiryDate DESC) a 
), 
result AS 
(
    SELECT 
     latest.ExpiryDate as LatestExpiryDate, latest.Size as LatestSize, latest.Weight as LatestWeight, 
     previous.ExpiryDate as PreviousExpiryDate, previous.Size as PreviousSize, previous.Weight as PreviousWeight, 
     CASE SIGN((latest.Weight * latest.Size) - (previous.Weight * previous.Size)) 
      WHEN 1 THEN 'Increased' 
      WHEN 0 THEN 'Static' 
      WHEN -1 THEN 'Decreased' 
      ELSE 'No Previous Data' 
     END AS Movement 
    FROM (SELECT TOP 1 * FROM (SELECT TOP 2 * FROM Fruits_Crate WHERE FruitID like @FruitID ORDER BY ExpiryDate DESC) x ORDER BY ExpiryDate) previous 
    FULL OUTER JOIN latest ON previous.FruitID = latest.FruitID 
) 

SELECT @RESULT = result.Movement AS FruitMovement from result; 


RETURN @Result 

END