消息 178,级别 15,状态 1,第 8 行 在此上下文中不能使用具有 return 值的 RETURN 语句
Msg 178, Level 15, State 1, Line 8 A RETURN statement with a return value cannot be used in this context
我在尝试执行以下 SQL 时收到此错误消息。
错误:
Msg 156, Level 15, State 1, Line 5
Incorrect syntax near the keyword 'FUNCTION'.
Msg 178, Level 15, State 1, Line 8
A RETURN statement with a return value cannot be used in this context.
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 语句中创建函数?
您不能在 if 语句中创建函数,这样您将收到以下警告
Incorrect syntax: CREATE FUNCTION
must be the only statment in the batch
您可以通过在该变量中创建一个变量来存储创建查询并执行它:
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
但我不明白为什么要为 return 静态值创建一个函数??!!
您没有理由想要在运行时在存储过程中创建函数。 SQL SERVER 中的函数与存储过程类似,所以如果你想创建一个函数,你需要在存储过程的上下文和范围之外进行,并且它将保存在你的数据库中以供随时访问时间.
Ontopic,如果您只想展示该日期值,您可以删除函数创建和 select 日期时间结果,如下所示:
IF (NOT EXISTS (SELECT TOP 1 1 FROM DBO.TRACKING WHERE CR = 123))
BEGIN
SELECT CAST('9999-12-31' AS DATETIME)
END
PS:当您只想知道某个值是否存在时,不要使用 "SELECT *"。当您只想知道是否存在任何内容时,它会产生不必要的开销来获取所有列。
我在尝试执行以下 SQL 时收到此错误消息。
错误:
Msg 156, Level 15, State 1, Line 5 Incorrect syntax near the keyword 'FUNCTION'. Msg 178, Level 15, State 1, Line 8 A RETURN statement with a return value cannot be used in this context.
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 语句中创建函数?
您不能在 if 语句中创建函数,这样您将收到以下警告
Incorrect syntax:
CREATE FUNCTION
must be the only statment in the batch
您可以通过在该变量中创建一个变量来存储创建查询并执行它:
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
但我不明白为什么要为 return 静态值创建一个函数??!!
您没有理由想要在运行时在存储过程中创建函数。 SQL SERVER 中的函数与存储过程类似,所以如果你想创建一个函数,你需要在存储过程的上下文和范围之外进行,并且它将保存在你的数据库中以供随时访问时间.
Ontopic,如果您只想展示该日期值,您可以删除函数创建和 select 日期时间结果,如下所示:
IF (NOT EXISTS (SELECT TOP 1 1 FROM DBO.TRACKING WHERE CR = 123))
BEGIN
SELECT CAST('9999-12-31' AS DATETIME)
END
PS:当您只想知道某个值是否存在时,不要使用 "SELECT *"。当您只想知道是否存在任何内容时,它会产生不必要的开销来获取所有列。