创建存储过程时的语法错误
Posted
技术标签:
【中文标题】创建存储过程时的语法错误【英文标题】:Syntax Errors when creating a stored procedure 【发布时间】:2014-03-03 22:39:57 【问题描述】:当我尝试使用以下代码创建存储过程时,出现错误。
create procedure Currentmonth(
@Completeddatekey varchar(20) )
as
begin
获取当前日期并格式化
Declare @currentdate varchar(30)
set @currentdate = convert(Varchar(20), getdate()-1, 101)
print @currentdate
从 DimDate 获取 DayofMonth 和 EndofMonth
Declare @dayofmonth int
Declare @endofmonth varchar(20)
select @dayofmonth = DayofMonth, @endofmonth = EndofMonthDateKey from DimDate
where datekey = @currentdate
获取 HierMonthEndKey
declare @hiermonthendkey int
select @hiermonthendkey = MAX(HierMonthEndKey) from DimHospiceHiearchy
where HierMonthEndKey <= @currentdate+1
声明@day
循环
Declare @i int = 0
declare @startdate varchar(20)
select @startdate = CAST(CAST(YEAR(convert(Varchar(20), getdate()-1, 101)) AS VARCHAR(4))
+ '/' + CAST(MONTH(convert(Varchar(20), getdate()-1, 101)) AS VARCHAR(2)) + '/01' AS DATETIME)+1
While @i <=@dayofmonth
(
set @startdate = @startdate+@i
Call MA010103(@completeddatekey,@hiermonthendkey)
set @i = @i+1
)
end
我在尝试创建上述存储过程时遇到这些错误
Msg 156,级别 15,状态 1,过程 Currentmonth,第 34 行 关键字“set”附近的语法不正确。 消息 102,级别 15,状态 1,过程 Currentmonth,第 35 行 “呼叫”附近的语法不正确。 消息 102,级别 15,状态 1,过程 Currentmonth,第 37 行 ')' 附近的语法不正确。
【问题讨论】:
【参考方案1】:您的WHILE
循环应如下所示:
While @i <=@dayofmonth
begin
set @startdate = @startdate+@i
exec MA010103 @completeddatekey, @hiermonthendkey
set @i = @i+1
end
您需要使用BEGIN
和END
,而不是括号。
要执行存储过程,请使用EXECUTE
(或EXEC
),不要使用括号作为参数。
【讨论】:
以上是关于创建存储过程时的语法错误的主要内容,如果未能解决你的问题,请参考以下文章