Функция, усекающая возвращаемое значение - PullRequest
0 голосов
/ 18 марта 2020

У меня есть таблица с информацией о состоянии и стране ...

CREATE TABLE [dbo].[states] (
    id          int identity(1,1),
    fullname    varchar(255),
    abbr        varchar(255),
    country     varchar(255)
)

 INSERT INTO [dbo].[states] VALUES
    ('Alabama', 'AL', 'United States'),
    ('Alaska', 'AK', 'United States'),
    ('Arizona', 'AZ', 'United States'),
    ('Arkansas', 'AR', 'United States'),
    ('California', 'CA', 'United States'),
    ...

У меня есть следующая функция:

ALTER FUNCTION [dbo].[fn_convert_state] (@mode int, @state varchar(255), @country varchar(120))
  RETURNS nvarchar(255)
BEGIN

DECLARE
    @strState   varchar(255),
    @strCountry varchar(255),
    @abbr       varchar(255),
    @fullname   varchar(255),
    @retVal     varchar(255)

IF @state IS NULL
    RETURN NULL

SET @strState = TRIM(@state)
SET @strCountry = TRIM(@country)

IF @mode = 1 OR @mode = 2
BEGIN
    SELECT @abbr = abbr, @fullname = fullname FROM [dbo].[states] WHERE abbr = @strState OR fullname = @strState AND country = @country

    IF @mode = 1
        RETURN @abbr
    ELSE IF @mode = 2
        RETURN @fullname
END
ELSE IF @mode = 3
BEGIN
    SELECT @retVal = country FROM [dbo].[states] WHERE abbr = @strState OR fullname = @strState
    RETURN @retVal
END

RETURN 'NOMATCH'
END

Когда я использую ее в этом запросе:

SELECT dbo.fn_convert_state(3, 'OH', NULL)

Возвращается «Юнайтед» вместо «США». Но если я запускаю:

SELECT country FROM [dbo].[states] WHERE abbr = 'OH'

Возвращает «США», как и должно быть.

Я в недоумении.

1 Ответ

0 голосов
/ 18 марта 2020

У меня это работает ...

Кстати, RETURN 'NOMATCH' никогда не будет выполнен, потому что NULL будет возвращен первым.

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