SQL - ошибки, вызванные неправильным синтаксисом рядом с ',' и объявлением переменных - PullRequest
0 голосов
/ 20 сентября 2019

Ниже приведен код, за которым следуют сообщения об ошибках.Желаемый результат - YYYY_diff.

Код:

1  create function YYYY_diff 
2        (
3            @periods double, @yr1 double, @yr2 double, @dd1 double, @dd2 double
4        )
5
6     returns double
7     as
8     begin
9
10     declare @y1 double, @y2 double, @modYr double
11
12    set @yr1 = floor(@y1 / @modYr)
13
14    set @yr2 = floor(@y2 / @modYr)
15
16    set @dd1 = @y1 % @modYr
17
18    set @dd2 = @y2 % @modYr
19
20
21    select @periods,
22   
23     case when @modYr = 1 then 1 
24          when @modYr = 2 then 10
25          when @modYr = 4 then 10
26          when @modYr = 12 then 100
27       
28     end
29
30     set @YYYY_diff = (@yr2 - @yr1) * @periods + @dd2 - @dd1 + 1
31
32    return @YYYY_diff
33
34  end 

Сообщения об ошибках:

Сообщение 102, уровень 15, состояние 1, процедура YYYY_diff, строка 3 [Строка запуска партии 0]
Неверный синтаксис рядом с ','.

Msg 102, Уровень 15, Состояние 1, Процедура YYYY_diff, строка 10 [Стартовая строка 0)
Неверный синтаксис рядом с ','.

Msg 137, уровень 15, состояние 2, процедура YYYY_diff, строка 12 [Batch Start Line 0]
Необходимо объявить скалярную переменную "@ y1".

Msg 137, уровень 15, состояние 2, процедураYYYY_diff, строка 14 [Batch Start Line 0]
Необходимо объявить скалярную переменную "@ y2".

Msg 137, уровень 15, состояние 2, процедура YYYY_diff, строка 16 [Batch Start Line 0]
Должен объявить скалярную переменную "@ y1".

Сообщение 137, Уровень 15, Состояние 2, Процедура YYYY_diff, Строка 18 [Стартовая строка 0)
Должен объявить скалярную переменную "@ y2".

Сообщение 137, уровень 15, состояние 2, процедура YYYY_diff, строка 21 [Строка пакетного запуска 0]
Необходимо объявить скалярную переменную "@periods".

сообщение 137, уровень 15, состояние 2, процедура YYYY_diff, строка 30 [строка запуска партии 0]
необходимо объявить скалярную переменную "@ yr2".

сообщение 137, уровень 15, состояние 2,Процедура YYYY_diff, строка 32 [Batch Start Line 0]
Необходимо объявить скалярную переменную "@YYYY_diff".

Ответы [ 2 ]

1 голос
/ 20 сентября 2019

Если вы используете sql-сервер, то double не является допустимым типом данных.

0 голосов
/ 20 сентября 2019

Если сервер Sql, попробуйте следующее: double не является допустимым типом данных, на самом деле это удвоенная точность в sql .Здесь для приведенного ниже используется десятичный тип данных.это не будет выбрасывать ошибки.

  CREATE OR ALTER function YYYY_diff 
        (
           @periods DECIMAL, @yr1 DECIMAL, @yr2 DECIMAL, @dd1 DECIMAL, @dd2 DECIMAL
        )

    returns DECIMAL
     as
     begin

     declare @y1 DECIMAL, @y2 DECIMAL, @modYr DECIMAL

    set @yr1 = floor(@y1 / @modYr)

    set @yr2 = floor(@y2 / @modYr)

    set @dd1 = @y1 % @modYr

    set @dd2 = @y2 % @modYr


    select @periods=

     case when @modYr = 1 then 1 
          when @modYr = 2 then 10
          when @modYr = 4 then 10
          when @modYr = 12 then 100

     end
     DECLARE @YYYY_diff DECIMAL;
     set @YYYY_diff = CAST((@yr2 - @yr1) * @periods + @dd2 - @dd1 + 1  AS DECIMAL)

    return @YYYY_diff

  end
...