7

Нужна помощь в этой процедуре SQL Server 2000. Проблема затруднена, потому что я тестирую процедуру через Oracle SQL Developer.Ошибка SQL: неправильный синтаксис рядом с ключевым словом «конец»

Я использую процедуру для итерации столбца с новой последовательностью чисел в формате Varchar для тех, у кого есть нулевые значения.

Но я продолжаю получать ошибку, так что a) Возможно, я сделал неправильный подход. B) Синтаксис неверен из-за используемой версии. Я в первую очередь пользователь Oracle.

Ошибка. Я продолжаю получать: SQL Error: Incorrect syntax near the keyword 'End'., что не является достаточным для исправления. End относится к самому последнему «концу» процедуры.

Любая помощь была бы принята с благодарностью.

Вот процедура.

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 

ответ

8

Вы пропускаете begin сразу после WHILE. Вы отступали так, как хотите блок (несколько операторов) в цикле while, и даже имеете end для while, но не begin.

сделать это:

... 
    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

Ну пятнистый. Теперь у меня другая ошибка. SQL Error: Invalid column name 'MyCur'.. Может быть, мой подход ошибочен. – Joshua

+0

вам нужно «СЛЕДУЮТ СЛЕДУЮЩИЙ ОТ MyCur INTO @ a'. так что вы должны сначала объявить локальную переменную @a, а затем изменить ... '+ ', где ток' + MyCur' на ...' + ', где текущий' + @ a' –

Смежные вопросы