我在下面的SQL代码中做错了什么?

时间:2017-10-17 17:31:49

标签: sql sql-server

SQL> set serverout on
SQL> CREATE PROCEDURE find employees
  2  BEGIN
  3  if Department_ID < 50 from Employees
  4  THEN
  5  RETURN select Employee_ID, First_Name, Last_Name, Department_ID from Employees where Department_ID < 50;
  6  ELSE
  7  RETURN select Employee_ID, First_Name, Last_Name, Department_ID from Employees where Department_ID > 50;
  8  END IF;
  9  /
Warning: Procedure created with compilation errors.

3 个答案:

答案 0 :(得分:2)

这没有任何意义。

返回只能返回整数,仅用于返回错误代码。

这也是错误地使用If以两种不同的方式。你在哪里获得Department_id的价值?并查找If的语法,因为你离开了。 当然,你不会在实际的存储过程中有行号。

用空格命名proc是一种不好的做法,不要这样做。

答案 1 :(得分:1)

我可以看到许多问题(根据标记假设这是MS-SQL):

    由于空间的原因,
  1. find employees不是有效的proc名称。绝对强迫它接受空间(警告:坏主意!!)你可以用[find employees]这样的括号括起来,但我肯定会推荐像find_employees这样的东西。

  2. 您错过了一个END来表示您的过程结束。

  3. 您不能在存储过程中使用RETURN,只能在函数内部使用Department_ID。您是否尝试将结果集传递给任何调用它(在这种情况下,您需要&#34;表值函数&#34;)?或者只显示结果?

  4. 您是否正在尝试传入 Department_ID?换句话说,每次运行时给它一个不同的@Department_ID?在这种情况下,您需要IF参数或其他内容。或者是从表中获取它?

  5. 我无法理解你的业务逻辑,这没有任何意义。你为什么要归还两个不同的雇员名单?您是否正在尝试计算每个部门属于多少员工?这是某种&#34;分页&#34;逻辑(一次只检索50名员工)?

  6. 您的IF @Department_ID < 50语法已关闭。应该是IF (SELECT COUNT(*) FROM Employees WHERE Department_ID = @Department_ID) > 50(对于参数)或END IF或类似的东西,但同样,我很难弄清楚你正在尝试做什么。

  7. SQL不使用{{1}}。查找单行IF ELSE语句和多行IF ELSE语句的语法。

  8.   

    警告:使用编译错误创建过程。

    是的。

答案 2 :(得分:0)

CREATE语句没有END ... 没有department_id的定义...... 没有声明为IF语句工作的参数... 函数名称中有一个空格......