T-SQL创建学生平均成绩函数报CREATE FUNCTION批处理唯一语句错误如何解决
报错原因
SQL Server要求CREATE FUNCTION语句必须是所在批处理内的唯一语句,如果你当前执行的脚本里这个函数创建语句前后还有其他SQL代码、或者没有显式指定批处理分隔符,就会触发该错误。你写的函数本身属于合法的标量用户定义函数格式,不需要修改函数结构。
解决方案
方案1:使用批处理分隔符(适用SSMS等支持GO关键字的客户端)
在函数创建语句的前后加上GO关键字,将其和其他代码分割为独立的批处理即可,示例代码如下:
-- 批处理分隔符,和前面的其他语句切割 GO CREATE FUNCTION averageGrade(@id int) RETURNS FLOAT AS BEGIN DECLARE @av FLOAT SELECT @av = AVG(Grade) FROM Take WHERE StudentNo = @id RETURN @av END GO
注意:如果你的数据库中已经存在同名的
averageGrade函数,需要先执行DROP FUNCTION IF EXISTS averageGrade,同样要在DROP语句后加GO分隔,再执行CREATE语句。
方案2:动态SQL执行(适用在存储过程/脚本中无法使用GO的场景)
如果你的执行环境不支持GO关键字,可以把整个函数创建语句放到动态SQL中单独执行:
EXEC sp_executesql N' CREATE FUNCTION averageGrade(@id int) RETURNS FLOAT AS BEGIN DECLARE @av FLOAT SELECT @av = AVG(Grade) FROM Take WHERE StudentNo = @id RETURN @av END '
内容的提问来源于stack exchange,提问作者moustafa
相关产品推荐
相关产品推荐

