尝试在SQL下执行时收到此错误消息。
错误:
第15行,第15行,第1行,第5行 关键字“FUNCTION”附近的语法不正确。 Msg 178,Level 15,State 1,Line 8 带有返回值的RETURN语句不能在此上下文中使用。
SQL:
IF (NOT EXISTS (SELECT * FROM DBO.TRACKING WHERE CR = 123))
BEGIN
CREATE FUNCTION [dbo].[UDFDate]()
RETURNS DATETIME
AS BEGIN
RETURN CAST('9999-12-31' AS DATETIME)
END
END
我是否不允许在if语句中创建一个Function?
答案 0 :(得分:2)
没有理由要在运行时期间在存储过程中创建函数。 SQL SERVER中的函数与存储过程的工作方式类似,因此如果要创建函数,则需要在存储过程的上下文和范围之外执行该函数,并将其保存在数据库中以便随时访问。
Ontopic,如果您只想展示该日期值,您可以删除函数创建并选择日期时间结果:
IF (NOT EXISTS (SELECT TOP 1 1 FROM DBO.TRACKING WHERE CR = 123))
BEGIN
SELECT CAST('9999-12-31' AS DATETIME)
END
PS:不要使用" SELECT *"当你只是想知道某个值是否存在时。当你只想知道是否存在所有列时,它会产生不必要的开销。
答案 1 :(得分:0)
您无法在if语句中创建函数,这样您将收到以下警告
语法不正确:
中的唯一法规CREATE FUNCTION
必须是批次
你可以通过在这个变量中创建一个变量stor创建查询来执行它并执行它:
IF (NOT EXISTS (SELECT * FROM DBO.TRACKING WHERE CR = 123))
BEGIN
DECLARE @strQuery AS VARCHAR(MAX)
SET @strQuery = '
CREATE FUNCTION [dbo].[UDFDate]()
RETURNS DATETIME
AS BEGIN
RETURN CAST(''9999-12-31'' AS DATETIME)
END
'
EXEC(@strQuery)
END
但我不明白为什么要创建一个返回静态值的函数?? !!