Sql server create函数必须是批处理中的唯一语句
我从函数中得到此错误:Sql server create函数必须是批处理中的唯一语句,sql-server,Sql Server,我从函数中得到此错误: 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 原因可能是什么 非常感谢。在执行
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
原因可能是什么
非常感谢。在执行该语句之前,请确保该语句是查询窗口中唯一的sql语句
或者您可以突出显示函数声明并执行将其转换为内联表值函数。这将比标量函数执行得更好。此外,不应使用字符数据类型的默认大小。你知道字符的默认长度是多少吗?你知道吗,它可以根据使用情况而变化
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
该函数需要是查询窗口中的唯一函数或批处理中的唯一语句。如果查询窗口中有更多语句,您可以使用GO语句将其包围,使其成为“批处理”中唯一的语句 e、 g
您需要在END语句之前添加RETURN
这应该能解决你的问题,这就是我的问题D解决这个问题的方法是,我试图在事务上下文中创建函数——从SQL Server的角度来看,这是没有意义的。事务用于数据,而不是函数
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
将CREATE FUNCTION语句从事务中取出,然后将其包装在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
你犯了什么错误?因为你把所有的东西都塞进了一条线。为什么要使用子查询来填充变量?这整件事看起来很适合使用intvf而不是标量函数。脚本中是否包含了您的语句和其他语句?如果是这样的话,函数前面的语句需要在末尾加一个
GO
。这样就行了!如何调用此函数并发送变量?ALTER TABLE Diving ADD CONSTRAINT…我试过:'ALTER TABLE Diving ADD CONSTRAINT getLavel CHECK(dbo.getLavel(guide,“guide”)!=null);'但是我得到了这个错误:找不到列“dbo”或用户定义函数或聚合“dbo.getLavel”,或者名称不明确。您正在创建标量,以便将其用作列上的约束?你一开始没有提到这一点。不能将表值函数用作约束破解。你必须回到标量函数。对不起,你能解释一下标量函数有什么不同吗?试试这个链接。它比我解释得更清楚。欢迎来到stackoverflow!如果你能解释一下为什么这个问题会得到答案,这会有所帮助。
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