【发布时间】:2016-02-06 09:52:26
【问题描述】:
我要为表的每条记录创建 SI,从存储过程中得到错误:
没有为“cte_Alldates”的第 6 列指定列名。
请检查这个脚本,让我知道问题出在哪里:
和存储过程:
create proc sp_calcualtteSI
as
begin
DECLARE @today datetime
SET @today = dateadd(day,datediff(day,0,current_timestamp),0)
; WITH cte_dates AS
(
SELECT DISTINCT
name, Pamount, Rateofint, cdate,
CASE
WHEN ISNULL(today, @today) < DATEADD(month, 1, DATEADD(month, datediff(month, 0, cdate), 0))
THEN ISNULL(@today, @today)
ELSE
DATEADD(month, 1, dateadd(month, datediff(month, 0, cdate), 0))
END AS MonthEnd,
ISNULL(@today, @today) AS End_date
FROM
tbl_intestcalculate),
cte_Alldates AS
(
SELECT
name, Pamount, Rateofint, cdate, monthEnd, @today
FROM
cte_dates
UNION
SELECT
name, Pamount, Rateofint,
DATEADD(month, number, monthEnd),
CASE
WHEN DATEADD(month, number + 1, monthEnd) < @today
THEN DATEADD(month, number + 1, monthEnd)
ELSE @today
END,
@today
FROM
cte_dates c
CROSS JOIN
(SELECT number
FROM master..spt_values
WHERE type = 'p' AND number BETWEEN 0 AND 11) a
WHERE
dateadd(month, number, monthEnd) < @today
)
SELECT
name, cdate, monthEnd, Pamount, Rateofint,
DATEDIFF(day, cdate, monthEnd) AS No_Of_Days,
ROUND(Pamount * Rateofint * DATEDIFF(day, cdate, monthEnd) / 36500, 2) AS SI
FROM
cte_Alldates
END
【问题讨论】:
-
请在此处张贴表格和存储过程 - 作为格式正确的文本 - 不要只张贴截图.....
-
请尽快解决
-
旁注:您应该不为您的存储过程使用
sp_前缀。微软有reserved that prefix for its own use (see Naming Stored Procedures),你确实会在未来某个时候冒着名称冲突的风险。 It's also bad for your stored procedure performance。最好只是简单地避免sp_并使用其他东西作为前缀 - 或者根本不使用前缀! -
Errr,错误信息就是解决方案。
@today是一个值,您希望它具有什么“列”名称?
标签: sql-server sql-server-2008 stored-procedures compiler-errors