2015-04-27 3 views
0

Я пытаюсь бросить свой результат, как VARCHAR, но он продолжает давать мне эту ошибку,SQL Дело не работает

Код

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, 
     DATEDIFF(DAY, latest.ExpiryDate, CURRENT_TIMESTAMP) As LastMovementInDays, 
     COALESCE((Select MovementInMonths from Fruits_Settings Where PolicyID like '178'),3) * 30 AS MM, 
     CASE SIGN((latest.Weight * latest.Size) - (previous.Weight * previous.Size)) 
      WHEN 1 THEN 'Increased' 
      WHEN 0 THEN 'Static' 
      WHEN -1 THEN 'Decreased' 
      ELSE 'Static' 
     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 = CAST( 
      CASE 
       WHEN LastMovementInDays <= MM AND (Movement = 'Increased' OR Movement = 'Decreased') 
        THEN Movement 
        ELSE 'Static' 
       END) AS VARCHAR 
FROM result;    
RETURN @Result 

END 

Ошибка

Msg 1035, Уровень 15, состояние 10, строка 25 Неправильный синтаксис рядом с «CAST», ожидается «AS».

Проблема с участием Я пытаюсь использовать здесь.

ответ

1

Вам не нужно указать CAST:

SELECT @Result = 
     CASE 
      WHEN LastMovementInDays <= MM AND (Movement = 'Increased' OR Movement = 'Decreased') 
       THEN 'Movement' 
       ELSE 'Static' 
      END 
FROM result; 

Обратите внимание, что строка по умолчанию для CAST к varchar составляет 30 символов. Однако это не вызывает проблем в вашем примере кода, так как вы определили @Result как VARCHAR(200), это может привести к усечению. Бегите к примеру:

SELECT CAST('the quick brown fox jumped over the lazy dog' AS VARCHAR) 
1

Вы должны поставить AS VARCHAR в CAST() функции, как показано ниже

SELECT @Result = CAST(CASE 
       WHEN LastMovementInDays <= MM AND (Movement = 'Increased' OR Movement = 'Decreased') 
        THEN Movement 
        ELSE 'Static' 
       END AS VARCHAR) 
FROM result;    
0

Изменить эту строку:

END) AS VARCHAR 

к этому один:

END AS VARCHAR) 
Смежные вопросы