T- SQL ЕСЛИ проблема - PullRequest
       57

T- SQL ЕСЛИ проблема

0 голосов
/ 14 февраля 2020

У меня есть следующая хранимая процедура:

ALTER PROCEDURE [dbo].[getipmp]
@year varchar(4)
AS
BEGIN

select * from (

IF @year = ''
    select distinct carlinenm
    from [interchange].[dbo].[carline] 
    WHERE CarlineYear >= 1990
ELSE
    select distinct carlinenm
    from [interchange].[dbo].[carline] 
    WHERE CarlineYear = @year

UNION ALL

SELECT distinct cast(carlineyear as varchar(4)),'Y|' + rtrim(cast(carlineyear as varchar(4)))
from [interchange].[dbo].[carline]
WHERE carlineyear >= 1990

) U

END

SQL - Express говорит:

Msg 156, Level 15, State 1, Procedure getipmp, Line 15 [Batch Start Line 7]
Incorrect syntax near the keyword 'IF'.
Msg 102, Level 15, State 1, Procedure getipmp, Line 43 [Batch Start Line 7]
Incorrect syntax near ')'.

Это относится к «IF» в начале и к последний ")" перед U.

Есть идеи, что там не так?

Спасибо!

1 Ответ

1 голос
/ 14 февраля 2020

Разве это не должно быть:

ALTER PROCEDURE [dbo].[getipmp]
(
    @year varchar(4)
)
AS
BEGIN

    select  distinct carlinenm
    ,       null
    from [interchange].[dbo].[carline] 
    WHERE (CarlineYear >= 1990 AND @year = '') OR CarlineYear = @year

    UNION ALL

    SELECT distinct 
        cast(carlineyear as varchar(4))
    ,   'Y|' + rtrim(cast(carlineyear as varchar(4)))
    from [interchange].[dbo].[carline]
    WHERE carlineyear >= 1990
END
...