sql-server – SQL错误:关键字“结束”附近的语法不正确

前端之家收集整理的这篇文章主要介绍了sql-server – SQL错误:关键字“结束”附近的语法不正确前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
需要有关此sql Server 2000过程的帮助.问题变得困难,因为我正在通过Oracle sql Developer测试程序.

我正在运行程序,使用Varchar格式的新数字序列迭代列,以获得具有空值的人.

但我一直收到错误,所以a)我可能做错了方法b)由于使用的版本语法不正确.我主要是Oracle用户.

我一直得到错误sql错误:关键字“结束”附近的语法不正确.这没有足够的帮助解决它.结束指的是程序中最后一个’结束’.

任何帮助将不胜感激.

这是程序.

  1. ALTER PROCEDURE [dbo].[OF_AUTOSEQUENCE] @JvarTable Varchar(250),@varColumn Varchar(250),@optIsString char(1),@optInterval int AS
  2. /*
  3. Procedure OF_AUTOSEQUENCE
  4. Created by Joshua [Surname omitted]
  5. When 20100902
  6.  
  7. Purpose To fill up column with new sequence numbers
  8. Arguments varTable - Table name
  9. varColumn - Column name
  10. optIsString - Option: is it string or numeric,either use T(rue) or F(alse)
  11. optInterval - Steps in increment in building new sequence (Should be 1 (one))
  12.  
  13. Example script to begin procedure
  14.  
  15. EXECUTE [dbo].[OF_AUTOSEQUENCE] 'dbo.EH_BrownBin','Match','T',1
  16.  
  17. Any questions about this,please send email to
  18. [business email omitted]
  19. */
  20.  
  21. declare
  22. @topseed int,@stg_topseed varchar(100),@sql_string nvarchar(4000),@myERROR int,@myRowCount int
  23.  
  24. set @sql_string = 'Declare MyCur CURSOR FOR select ' + @varColumn + ' from ' + @JvarTable + ' where ' + @varColumn + ' is null'
  25. Exec sp_executesql @sql_string
  26.  
  27. SET NOCOUNT ON
  28.  
  29. Begin
  30.  
  31. if @optIsString = 'T'
  32. Begin
  33. set @sql_string = 'select top 1 ' + @varColumn + ' from ' + @JvarTable + ' order by convert(int,' + @varColumn + ') desc'
  34. set @stg_topseed = @sql_string
  35. set @topseed = convert(int,@stg_topseed)
  36. ENd
  37. else
  38. Begin
  39. set @sql_string = 'select top 1 ' + @varColumn + ' from ' + @JvarTable + ' order by ' + @varColumn + ' desc'
  40. set @topseed = @sql_string
  41. ENd
  42. -- SELECT @myERROR = @@ERROR,@myRowCOUNT = @@ROWCOUNT
  43. -- IF @myERROR != 0 GOTO HANDLE_ERROR
  44.  
  45.  
  46. open MyCur
  47. fetch next from MyCur
  48. WHILE @@FETCH_STATUS = 0
  49. set @topseed = @topseed + @optInterval
  50. if @optIsString = 'T'
  51. begin
  52. set @sql_string = 'update ' + @JvarTable + ' set ' + @varColumn + ' = cast((' + @topseed + ') as char) where current of ' + MyCur
  53. exec (@sql_string)
  54. ENd
  55. else
  56. begin
  57. set @sql_string = 'update ' + @JvarTable + ' set ' + @varColumn + ' = ' + @topseed + ' where current of ' + MyCur
  58. exec (@sql_string)
  59. ENd
  60. fetch next from MyCur
  61. ENd
  62. -- SELECT @myERROR = @@ERROR,@myRowCOUNT = @@ROWCOUNT
  63. -- IF @myERROR != 0 GOTO HANDLE_ERROR
  64.  
  65. --HANDLE_ERROR:
  66. --print @myERROR
  67.  
  68. CLOSE MyCur
  69. DEALLOCATE MyCur
  70.  
  71. End

解决方法

你在WHILE之后就错过了一个开头.你缩进就像你想要一个块(多个语句)在while循环中,甚至有一个结束,但没有开始.

做了:

  1. ...
  2. open MyCur
  3. fetch next from MyCur
  4. WHILE @@FETCH_STATUS = 0
  5. begin --<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<add this
  6. set @topseed = @topseed + @optInterval
  7. if @optIsString = 'T'
  8. begin
  9. set @sql_string = 'update ' + @JvarTable + ' set ' + @varColumn + ' = cast((' + @topseed + ') as char) where current of ' + MyCur
  10. exec (@sql_string)
  11. ENd
  12. else
  13. begin
  14. set @sql_string = 'update ' + @JvarTable + ' set ' + @varColumn + ' = ' + @topseed + ' where current of ' + MyCur
  15. exec (@sql_string)
  16. ENd
  17. fetch next from MyCur
  18. ENd
  19. ...

猜你在找的MsSQL相关文章