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
Bien vu. Maintenant, j'ai une erreur différente.
SQL Error: Invalid column name 'MyCur'.
. Peut-être que mon approche est fausse. – Joshuavous 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' –