2016-02-25 119 views
0

尝试运行下面的查询时,出现'db_cursor'附近的错误语法错误。有人可以告诉我为什么和我的脚本错误在哪里?提前致谢!“db_cursor”附近的语法不正确

declare @Sort varchar(4000) 
declare @OpenDate datetime 
declare @ret int; 

    set @Sort = 'All' 
    set @OpenDate = '1/1/2015' 

    IF (@Sort = 'All') 
     BEGIN 
      declare @Organization varchar(2500) 
      declare @OrgEmp int   

      Set @OrgEmp = 0 
      Set @ret = 0 

declare db_cursor CURSOR FOR 
    SELECT distinct RTrim(Organization) + '|' as Oganization, 
      (select rpt.ufnGetEmployeePopulation(RTrim(Organization) + '|', @OpenDate)) as NumberofEmployee FROM dbo.CorpStartEndDates where EndDate >= @OpenDate 

    OPEN db_cursor 
    FETCH NEXT FROM db_cursor INTO @Organization, @OrgEmp 

    WHILE @@FETCH_STATUS = 0 
    BEGIN 
     Set @ret = @ret + @OrgEmp 

     FETCH NEXT FROM db_cursor INTO @Organization, @OrgEmp 

     END 

CLOSE db_cursor 
DEALLOCATE db_cursor 
+0

哪个RDBMS是这样的?请添加一个标签来指定您是使用'mysql','postgresql','sql-server','oracle'还是'db2' - 或者其他的东西。 –

回答

0

你缺少结束

如果游标是DEALLOCATE

后的第一个BEGIN/END然后把里面到底如果光标是第一个开始/结束之外,但是前开

所以最终..

declare @Sort varchar(4000) 
    declare @OpenDate datetime 
    declare @ret int; 

    set @Sort = 'All' 
    set @OpenDate = '1/1/2015' 

    IF (@Sort = 'All') 
    BEGIN 
     declare @Organization varchar(2500) 
     declare @OrgEmp int   

     Set @OrgEmp = 0 
     Set @ret = 0 

     declare db_cursor CURSOR FOR 
     SELECT distinct RTrim(Organization) + '|' as Oganization, 
     (select rpt.ufnGetEmployeePopulation(RTrim(Organization) + '|', @OpenDate)) as NumberofEmployee FROM dbo.CorpStartEndDates where EndDate >= @OpenDate 

     OPEN db_cursor 
     FETCH NEXT FROM db_cursor INTO @Organization, @OrgEmp 

     WHILE @@FETCH_STATUS = 0 
     BEGIN 
      Set @ret = @ret + @OrgEmp 

      FETCH NEXT FROM db_cursor INTO @Organization, @OrgEmp 

     END 

     CLOSE db_cursor 
     DEALLOCATE db_cursor 
    END 

IF (@Sort = 'All') 
    BEGIN 
     declare @Organization varchar(2500) 
     declare @OrgEmp int   

     Set @OrgEmp = 0 
     Set @ret = 0 
    END