SQL报错:CREATE FUNCTION必须是查询批处理的第一条语句
解决'CREATE FUNCTION' must be the first statement in a query batch错误
这个问题是SQL Server的批处理规则导致的——CREATE FUNCTION(以及其他大部分DDL语句,比如CREATE PROCEDURE、CREATE VIEW)必须作为一个查询批处理的第一个语句,不能和其他SQL语句(比如你的SELECT)放在同一个批里执行。
解决方案:用GO分隔批处理
在SQL Server中,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
其他场景的处理
如果是在应用程序(比如C#、Java)中执行这些SQL语句,不要把SELECT和CREATE FUNCTION放在同一个ExecuteNonQuery或类似的方法调用里,应该分成两个独立的执行命令,先执行SELECT,再执行CREATE FUNCTION。
原理很简单:每个批处理是数据库引擎独立解析和执行的单元,DDL语句需要独占一个批处理的起始位置,避免解析冲突。
内容的提问来源于stack exchange,提问作者Escaper
相关产品推荐
相关产品推荐

