【发布时间】:2020-09-30 13:40:43
【问题描述】:
create function fiyathesapla(@StartDate datetime2(5),@EndDate datetime2(5),@kodu nvarchar(max))
returns table
as
return (
WITH theDates AS
(SELECT @StartDate as theDate
UNION ALL
SELECT DATEADD(day, 1, theDate)
FROM theDates
WHERE DATEADD(day, 1, theDate) <= @EndDate
)
SELECT SUM( v_period.fiyat-((v_period.fiyat/100)*v_period.indirim)) FROM theDates,v_period WHERE tarih1<=theDates.theDate and tarih2>=theDates.theDate and vkodu=@kodu
)
go
---错误码---
消息 4514,第 16 级,状态 1,程序 fiyathesapla,第 6 行 [批处理开始第 0 行] CREATE FUNCTION 失败,因为没有为第 1 列指定列名。
我在尝试创建函数时收到此错误。 它有助于通过逐天计算两个输入的日期来计算价格。 但是当我创建存储过程时它可以工作。 我想创建一个函数,如何编辑它。
---正常运行的程序代码---
USE [villapaket1]
GO
/****** Object: StoredProcedure [dbo].[FN_fiyat] Script Date: 30.09.2020 16:18:46 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[FN_fiyat] @StartDate datetime2(5),@EndDate datetime2(5),@kodu nvarchar(max)
AS
WITH theDates AS
(SELECT @StartDate as theDate
UNION ALL
SELECT DATEADD(day, 1, theDate)
FROM theDates
WHERE DATEADD(day, 1, theDate) <= @EndDate
)
SELECT SUM( v_period.fiyat-((v_period.fiyat/100)*v_period.indirim)) FROM theDates,v_period WHERE tarih1<=theDates.theDate and tarih2>=theDates.theDate and vkodu=@kodu
【问题讨论】:
-
您的代码不是 MySQL。它看起来像 SQL Server,所以我添加了那个标签。
-
看起来数据库引擎告诉你
SUM( v_period.fiyat-((v_period.fiyat/100)*v_period.indirim))(=最终select的第一列)需要一个别名。这不是在函数外部显示结果所必需的,但它是返回具有有效列名的表所必需的。 -
问题出在“WITH theDates AS”
标签: sql-server tsql stored-functions