2015-12-26 6 views
0

Мне просто интересно, почему это работает. Но то, что у меня есть, не работает.Рекурсивная функция SQL, <= оператор не работает

ALTER PROC spFactorial 
    @ValueIn int, 
    @ValueOut int OUTPUT 
AS 
    DECLARE @InWorking int; 
    DECLARE @OutWorking int; 

    IF @ValueIn <> 1   -- this <= doesn't work?? 
    BEGIN 
     SELECT @InWorking = @ValueIn - 1; 

     EXEC spFactorial @InWorking, @OutWorking OUTPUT; 

     SELECT @ValueOut = @ValueIn * @OutWorking; 
    END 
    ELSE 
    BEGIN 
     SELECT @ValueOut = 1; 
    END 

    RETURN; 
GO 

DECLARE @WorkingOut int; 
DECLARE @WorkingIn int; 
SELECT @WorkingIn = 3; 

EXEC spFactorial @WorkingIn, @WorkingOut OUTPUT; 

PRINT CAST(@WorkingIn AS varchar) + ' factorial is ' 
+ CAST(@WorkingOut AS VARCHAR); 

IF @ValueIn <= 1 не работает - почему?

В C# или java он работает.

Спасибо

+0

'<=' отлично работает для меня .... 'DECLARE @ValueIn INT = 1 ; ЕСЛИ @ValueIn <= 1 НАЧАТЬ PRINT '1' END ELSE НАЧАТЬ PRINT '2' END' –

ответ

0
<= is not an operator in SQL. In c# and Java it is. 

Для < = функциональность оператора в Sql, вы можете сделать это

IF(@value < 1 OR @value = 1) 
+0

'<=' является оператором в SQL Server. https://msdn.microsoft.com/en-us/library/ms188074.aspx –

 Смежные вопросы

  • Нет связанных вопросов^_^