首页 > 解决方案 > 获取 CREATE FUNCTION 必须是批处理中的唯一语句 - SQLServer

问题描述

在以下查询中,我得到“必须是批处理中的唯一语句”错误

CREATE FUNCTION IsManager
(@EnteredEmployeeID DECIMAL(11,0))
RETURNS FLOAT
AS
BEGIN
    DECLARE @Ret DECIMAL;
    SELECT @Ret = ManagerID 
    FROM Manager
    WHERE ManagerID = EnteredEmployeeID;

    IF(@Ret>0)  
        RETURN 0.03
    ELSE
        RETURN 0.02
END

一些建议是删除输入变量的 @ 符号,这会导致另一个错误,因为它需要一个变量。

请让我知道此查询有什么问题,并在此先感谢您

标签: sqlsql-server

解决方案


这是一个演示

CREATE FUNCTION IsManager(@EnteredEmployeeID DECIMAL(11,0))
RETURNS FLOAT
AS
BEGIN
    DECLARE @Ret DECIMAL, @result FLOAT;
    SELECT @Ret = ManagerID 
    FROM Manager
    WHERE ManagerID = @EnteredEmployeeID;

    IF(@Ret>0)  
        set @result = 0.03
    ELSE
        set @result = 0.02

    return @result
END

我建立了一些东西:

  1. 您正在从表中选择数据,并且在 where 子句中,您需要使用在调用她时已转发给函数的变量。所以代替这个:

    WHERE ManagerID = EnteredEmployeeID;
    

    这个:

    WHERE ManagerID = @EnteredEmployeeID;
    
  2. 您必须将值设置为某个变量,然后在最后使用 return 语句返回它......所以而不是这个:

    IF(@Ret>0)  
       RETURN 0.03
    ELSE
       RETURN 0.02
    

    这个:

    IF(@Ret>0)  
       set @result = 0.03
    ELSE
       set @result = 0.02
    
    return @result
    

我做了更多的研究,这就是为什么我问你“你如何运行这个语句?你只是想运行这个创建函数语句吗?”。请确认这不是您的情况:

正如错误消息所示,CREATE FUNCTION 语句必须是查询批处理中的第一条语句。在 CREATION FUNCTION 语句之前不应有其他语句使其不是查询批处理中的第一条语句。

如果是,那么就在语句之间添加关键字 GO。

这是一个很好的解释:

http://www.sql-server-helper.com/error-messages/msg-111-create-function.aspx


推荐阅读