7

Cần trợ giúp với thủ tục SQL Server 2000 này. Vấn đề được thực hiện khó khăn bởi vì tôi đang thử nghiệm thủ tục thông qua Oracle SQL Developer.Lỗi SQL: Cú pháp không đúng gần từ khóa 'Kết thúc'

Tôi đang chạy quy trình để lặp cột với chuỗi số mới trong định dạng Varchar cho những người có giá trị null.

Nhưng tôi tiếp tục nhận được lỗi, vì vậy a) Tôi có thể đã làm sai phương pháp tiếp cận b) cú pháp không đúng do phiên bản được sử dụng. Tôi chủ yếu là người dùng Oracle.

Lỗi tôi tiếp tục nhận được: SQL Error: Incorrect syntax near the keyword 'End'. không đủ hữu ích để khắc phục sự cố. Các End đề cập đến 'cuối cùng' cuối cùng trong thủ tục.

Mọi trợ giúp sẽ được đánh giá cao.

Đây là Quy trình.

ALTER PROCEDURE [dbo].[OF_AUTOSEQUENCE] @JvarTable Varchar(250), @varColumn Varchar(250), @optIsString char(1), @optInterval int AS 
/* 
Procedure OF_AUTOSEQUENCE 
Created by Joshua [Surname omitted] 
When  20100902 

Purpose  To fill up column with new sequence numbers 
Arguments varTable - Table name 
      varColumn - Column name 
      optIsString - Option: is it string or numeric, either use T(rue) or F(alse) 
      optInterval - Steps in increment in building new sequence (Should be 1 (one)) 

Example script to begin procedure 

EXECUTE [dbo].[OF_AUTOSEQUENCE] 'dbo.EH_BrownBin', 'Match', 'T', 1 

Any questions about this, please send email to 
[business email omitted] 
*/ 

declare 
@topseed  int, 
@stg_topseed varchar(100), 
@Sql_string nvarchar(4000), 
@myERROR  int,  
@myRowCount int 

set @Sql_string = 'Declare MyCur CURSOR FOR select ' + @varColumn + ' from ' + @JvarTable + ' where ' + @varColumn + ' is null' 
Exec sp_executesql @Sql_string 

SET NOCOUNT ON 

Begin 

    if @optIsString = 'T' 
    Begin 
     set @Sql_string = 'select top 1 ' + @varColumn + ' from ' + @JvarTable + ' order by convert(int, ' + @varColumn + ') desc' 
     set @stg_topseed = @Sql_string 
     set @topseed = convert(int, @stg_topseed) 
    ENd 
    else 
    Begin 
     set @Sql_string = 'select top 1 ' + @varColumn + ' from ' + @JvarTable + ' order by ' + @varColumn + ' desc' 
     set @topseed = @Sql_string 
    ENd 
-- SELECT @myERROR = @@ERROR, @myRowCOUNT = @@ROWCOUNT 
-- IF @myERROR != 0 GOTO HANDLE_ERROR 


    open MyCur 
    fetch next from MyCur 
    WHILE @@FETCH_STATUS = 0 
    set @topseed = @topseed + @optInterval 
    if @optIsString = 'T' 
     begin 
     set @Sql_string = 'update ' + @JvarTable + ' set ' + @varColumn + ' = cast((' + @topseed + ') as char) where current of ' + MyCur 
     exec (@Sql_string) 
     ENd 
    else 
     begin 
     set @Sql_string = 'update ' + @JvarTable + ' set ' + @varColumn + ' = ' + @topseed + ' where current of ' + MyCur 
     exec (@Sql_string) 
     ENd 
    fetch next from MyCur 
    ENd 
-- SELECT @myERROR = @@ERROR, @myRowCOUNT = @@ROWCOUNT 
-- IF @myERROR != 0 GOTO HANDLE_ERROR 

--HANDLE_ERROR: 
--print @myERROR 

CLOSE MyCur 
DEALLOCATE MyCur 

End 

Trả lời

8

bạn đang thiếu begin ngay sau WHILE. Bạn đã thụt lề như bạn muốn một khối (nhiều câu lệnh) trong vòng lặp while và thậm chí có một số end cho số while, nhưng không có begin.

làm cho nó:

... 
    open MyCur 
    fetch next from MyCur 
    WHILE @@FETCH_STATUS = 0 
    begin --<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<add this 
    set @topseed = @topseed + @optInterval 
    if @optIsString = 'T' 
     begin 
     set @Sql_string = 'update ' + @JvarTable + ' set ' + @varColumn + ' = cast((' + @topseed + ') as char) where current of ' + MyCur 
     exec (@Sql_string) 
     ENd 
    else 
     begin 
     set @Sql_string = 'update ' + @JvarTable + ' set ' + @varColumn + ' = ' + @topseed + ' where current of ' + MyCur 
     exec (@Sql_string) 
     ENd 
    fetch next from MyCur 
    ENd 
... 
+0

Vâng đốm. Bây giờ tôi có một lỗi khác. SQL Error: Invalid column name 'MyCur'.. Có lẽ cách tiếp cận của tôi là sai. – Joshua

+0

bạn cần phải 'TIẾP TỤC TIẾP TỤC TỪ MyCur INTO @ a'. vì vậy, bạn phải khai báo một biến cục bộ @a trước đó và sau đó thay đổi ... '+ 'trong đó hiện tại của' + MyCur' thành ...' + 'ở vị trí hiện tại của' + @ a' –

Các vấn đề liên quan