我从函数中得到了这个错误:
CREATE FUNCTION getLavel(@id int ,@lavel char)
RETURNS date
BEGIN
DECLARE @date date
select @date = (select authorization_date from Authorized WHERE diver_number = @id and @lavel =level_name)
return @date
END
GO
可能是什么原因?
非常感谢。答案 0 :(得分:10)
该函数需要是查询窗口中的唯一函数或批处理中的唯一语句。如果查询窗口中有更多语句,则可以使其成为批处理中的唯一语句"用GO来包围它。
e.g。
GO
CREATE FUNCTION getLavel(@id int ,@lavel char)
RETURNS date
BEGIN
DECLARE @date date
select @date = (select authorization_date from Authorized WHERE diver_number = @id and @lavel =level_name)
return @date
END
GO
答案 1 :(得分:3)
将其转换为内联表值函数。这将比标量函数表现更好。此外,您不应使用字符数据类型的默认大小。你知道char的默认长度是多少吗?您是否知道它可能会根据使用情况而有所不同?
CREATE FUNCTION getLavel
(
@id int
, @lavel char --You need to define the length instead of the default length
)
RETURNS table
return
select authorization_date
from Authorized
WHERE diver_number = @id
and @lavel = level_name
GO
答案 2 :(得分:3)
您需要在END语句
之前添加RETURN那应该解决你的问题,那就是我的问题。 :d
答案 3 :(得分:1)
在执行之前,请确保此语句是查询窗口中唯一的唯一sql。
或者您可以突出显示函数声明并执行
答案 4 :(得分:0)
CREATE FUNCTION CalculateAge(@DOB DATE)
RETURNS INT
AS
BEGIN
DECLARE @Age INT
SET @DOB='08/12/1990'
SET @Age =DATEDIFF(YEAR,@DOB,GETDATE()) -
CASE
WHEN (MONTH (@DOB)> MONTH (GETDATE ())) OR
(MONTH (@DOB)= MONTH (GETDATE ()) AND DAY (@DOB) >DAY (GETDATE ()))
THEN 1
ELSE 0
END
SELECT @Age
END
答案 5 :(得分:0)
为我解决了什么,是因为我试图在事务上下文中创建函数 - 从SQL Server的角度来看这是没有意义的。交易是针对数据而非函数。
将CREATE FUNCTION语句从事务中取出,然后将其包装在GO
中答案 6 :(得分:0)
仅在查询页面中会给出错误,但是如果执行查询,它将成功执行。
CREATE FUNCTION getLavel(@id int ,@lavel char)
RETURNS date
BEGIN
DECLARE @date date
select @date = (select authorization_date from Authorized WHERE diver_number = @id and @lavel = level_name)
return @date
END
GO