创建存储过程时的语法错误

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

    您需要使用BEGINEND,而不是括号。

    要执行存储过程,请使用EXECUTE(或EXEC),不要使用括号作为参数。

【讨论】:

以上是关于创建存储过程时的语法错误的主要内容,如果未能解决你的问题,请参考以下文章

存储过程出现错误.关键字'ORDER'附近有语法错误.')'附近有语法错误.

存储过程发出语法错误

sqlserver存储过程语法错误的问题

在使用 CTE 的存储过程中出现不正确的语法错误

表创建时的 MySQL 语法错误

MySQL存储过程语法错误:if else