Query выдает ошибку newнять строку в функции create - PullRequest
0 голосов
/ 12 октября 2018

Я пытаюсь создать функцию в SQL Server и получаю эту ошибку:

[S0001] [102] Неверный синтаксис рядом с '@ string2'

в строке

DECLARE @string2 VARCHAR(255) = @s;

Я создал много функций, но никогда не получаю такую ​​ошибку

Здесь завершено

CREATE FUNCTION dbo.GetMeterNumber(@s AS VARCHAR(MAX))
RETURNS VARCHAR(MAX) AS
BEGIN
    IF @s IS NOT NULL
    BEGIN
        DECLARE @string2 VARCHAR(255) = @s;
        @string2 = REPLACE(REPLACE(LEFT(REVERSE(LEFT(REVERSE(@string2), CHARINDEX('/', REVERSE(@string2)) - 1)),
                                      CHARINDEX('-',
                                                REVERSE(
                                                    LEFT(REVERSE(@string2), CHARINDEX('/', REVERSE(@string2)) - 1)))
                                      - 1), 'NUMBER_', ''), '_OF_10', '')
        RETURN @string2
    END
END
GO

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

Проблема с вашей переменной (@s), она должна быть объявлена ​​до BEGIN, а return должен идти после END:

Итак, правильная версия будет:

CREATE FUNCTION dbo.GetMeterNumber(@s AS VARCHAR(MAX))
RETURNS VARCHAR(MAX) AS
BEGIN

DECLARE @string2 VARCHAR(MAX) = @s

  IF @s IS NOT NULL
    BEGIN

      SET @string2 = REPLACE(REPLACE(LEFT(REVERSE(LEFT(REVERSE(@string2), CHARINDEX('/', REVERSE(@string2)) - 1)),
                                      CHARINDEX('-',
                                                REVERSE(
                                                    LEFT(REVERSE(@string2), CHARINDEX('/', REVERSE(@string2)) - 1)))
                                      - 1), 'NUMBER_', ''), '_OF_10', '')

    END

  RETURN @string2
END

РЕДАКТИРОВАТЬ: Я бы добавил некоторые предупреждения в основной loigc:

REPLACE(REPLACE(LEFT(REVERSE(LEFT(REVERSE(@string2), CHARINDEX('/', REVERSE(@string2 + '/')) - 1)),
                                      CHARINDEX('-',
                                                REVERSE(
                                                    LEFT(REVERSE(@string2), CHARINDEX('/', REVERSE(@string2 + '/')) - 1) + '-'))
                                      - 1), 'NUMBER_', ''), '_OF_10', '')
0 голосов
/ 12 октября 2018

Вы начинаете утверждение с @string2 = ..., когда я предполагаю, что вы хотели поместить туда set или select

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...