7

Besoin d'aide avec cette procédure SQL Server 2000. Le problème est rendu difficile parce que je suis la procédure de test via Oracle SQL Developer.Erreur SQL: syntaxe incorrecte près du mot clé 'End'

Je cours la procédure pour itérer la colonne avec une nouvelle séquence de nombres au format Varchar pour ceux qui ont des valeurs nulles.

Mais je continue d'obtenir des erreurs, donc a) J'ai peut-être fait une mauvaise approche b) la syntaxe est incorrecte en raison de la version utilisée. Je suis principalement un utilisateur Oracle. Erreur Je continue à obtenir: SQL Error: Incorrect syntax near the keyword 'End'. qui n'est pas assez utile pour le réparer. Le End fait référence à la toute dernière 'Fin' de la procédure.

Toute aide serait grandement appréciée.

Voici la procédure.

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 

Répondre

8

vous manque un begin juste après la WHILE. Vous indent comme vous voulez un bloc (plusieurs déclarations) dans la boucle while, et même avoir un end pour le while, mais pas begin.

rendent:

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

Bien vu. Maintenant, j'ai une erreur différente. SQL Error: Invalid column name 'MyCur'.. Peut-être que mon approche est fausse. – Joshua

+0

vous devez 'FETCH NEXT FROM MyCur INTO @ a'. donc, vous devez déclarer une variable locale @a précédemment, puis changer ... '+ 'où courant de' + MyCur' à ...' + 'où courant de' + @ a' –

Questions connexes