MMSG178,第15级,状态1,第8行,带有返回值的返回语句不能在此上下文中使用

问题描述 投票:0回答:3
i在试图在SQL下执行时收到了此错误消息。

eRror:

MSG156,15级,状态1,第5行 关键字“函数”附近的语法不正确。 MSG 178,15级,州1,第8行 在此上下文中不能使用带有返回值的返回语句。

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

AM我不允许在语句中创建一个函数?

sql sql-server sql-server-2008 t-sql sql-function
3个回答
2
投票
主题,如果您只想展示该日期值,则可以删除函数创建并选择DateTime结果,如:

IF (NOT EXISTS (SELECT TOP 1 1 FROM DBO.TRACKING WHERE CR = 123)) BEGIN SELECT CAST('9999-12-31' AS DATETIME) END

PS:当您只想知道是否存在某个值时,请勿使用“选择 *”。它创建不必要的开销,可以在您只想知道是否存在时带上所有列。

您无法在以这种方式使用语句中创建一个函数,您将获得以下警告


0
投票
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 enter image description here

但是我不明白为什么创建一个函数以返回静态值?!!enter image description here

如果存在(从sys.Objects中选择 * object_id = object_id(n'[dbo]。 然后输入(n'fn',n'if',n'tf',n'fs',n'ft'))) Drop函数[DBO]。[计算PliceWithDiscount] 去 创建函数dbo.calculatePriceWithDiscount(@productid int = 10)

返回表

0
投票
as

Begin

DECLARE @DiscountedPrice decimal(10,2); SELECT @DiscountedPrice = (SELECT ALLW_UNIT * (2) FROM TMS_TIME_IN_EMPE_ALLW WHERE COMP_CODE='GSS' AND EMPE_ID='00100030793' AND TRNS_DATE='20230715' AND SRL_NO = @ProductID); RETURN ( SELECT DEPT_CODE, @DiscountedPrice AS Price FROM TMS_TIME_IN_EMPE_ALLW WHERE COMP_CODE='GSS' AND EMPE_ID='00100030793' AND TRNS_DATE='20230715' AND SRL_NO = @ProductID );

端;

Go 授予Select在[计算priceWithDiscount]到hr_role 去

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.