У меня есть таблица с информацией о состоянии и стране ...
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'
Возвращает «США», как и должно быть.
Я в недоумении.