2016-01-22 178 views
1

如何解决语法,我想只执行一个select语句根据用户的输入即@id附近有语法错误)'

Create Procedure employee 
    @id int, 
    @year int 
AS 
    SELECT 
     CASE 
      WHEN @id = 1 
      THEN (select a.name, b.roles 
        from employee a 
        inner join department b on a.id = b.id 
        where b.years in (@year) 
         or b.roles is not null) 
      ELSE 
       CASE 
       WHEN @id = 2 
        THEN (select a.name, b.dayoff 
         from employee a 
         inner join department b on a.id = b.id 
         where b.years in (@year) 
          or b.dayoff is not null) 

回答

2

想必,你想if

Create Procedure employee (
    @id int, 
    @year int 
) 
AS 
BEGIN 
    IF @id = 1 
    BEGIN 
     select a.name, b.roles 
     from employee a join 
      department b 
      ON a.id = b.id 
      where b.years IN (@year) OR b.roles IS NOT NULL ) ; 
    END 
    ELSE if @id = 2 
    BEGIN 
     select a.name, b.dayoff 
     from employee a join 
      department b 
      ON a.id = b.id 
     where b.years IN (@year) OR b.dayoff IS NOT NULL ) ; 
    END 
END; 

我不知道你为什么用in@year;这只有在@year中有一个值时才有效。

+0

谢谢戈登,但替换后,我仍然得到不正确的语法附近THEN。我错过了什么..? –

+0

@kdud。 。 。 Ooops,SQL Server没有'THEN'。我通常在'BEGIN'和'END'之间放置任何语句。 –

1

更改以下行

SELECT CASE WHEN @id = 1 THEN 

对此

IF @id = 1 THEN 

因为你不能使用CASE表达这样的,它应该在查询中使用。由于你的代码块应该看起来像

IF @id = 1 THEN 

(select a.name, b.roles from employee a 
INNER JOIN department b ON a.id = b.id 
where b.years IN (@year) 
OR b.roles IS NOT NULL ) 

ELSE 

(select a.name, b.dayoff from employee a 
INNER JOIN department b ON a.id = b.id 
where b.years IN (@year) 
OR b.dayoff IS NOT NULL )