'CREATE FUNCTION' 必须是查询批处理中的第一条语句

'CREATE FUNCTION' must be the first statement in a query batch

每当我 运行 这个连同其他 sql 语句时,它会给出一个错误:

CREATE FUNCTION' must be the first statement in a query batch

但是,每当我单独执行它时(在我的情况下没有 SELECT * FROM CUSTOMER 它有效)

   SELECT * FROM CUSTOMER;

   create function udfLogin
    (@username nvarchar(100), @password nvarchar(100)) 
    returns int as
    begin
      if exists(select 1 from CUSTOMER where Username = @username and [Password] = @password)
        return 1
      return 0;
    end

您需要包含批处理分隔符,例如 Go

SELECT * FROM CUSTOMER
GO
   create function udfLogin
    (@username nvarchar(100), @password nvarchar(100)) 
    returns int as
    begin
      if exists(select 1 from CUSTOMER where Username = @username and [Password] = @password)
        return 1
      return 0;
    end
Go

您需要使用GO关键字将每批代码分开。

SELECT * FROM CUSTOMER
 GO
   create function udfLogin
    (@username nvarchar(100), @password nvarchar(100)) 
     returns int as
     begin
      if exists(select 1 from CUSTOMER where Username = @username and 
      [Password] = @password)
       return 1
     return 0;
   end
Go

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

SQL 将语句作为查询批处理执行。

批次使用规则

以下规则适用于使用批次:

CREATE DEFAULT, CREATE FUNCTION, CREATE PROCEDURE, CREATE RULE, CREATE SCHEMA, CREATE TRIGGER, and CREATE VIEW statements cannot be combined with other statements in a batch. The CREATE statement must start the batch. All other statements that follow in that batch will be interpreted as part of the definition of the first CREATE statement.