SQL-Fehler: Falsche syntax bei das Schlüsselwort 'End'
Brauchen Hilfe mit SQL-Server 2000 Verfahren. Das problem ist schwierig, da bin ich-Testverfahren mittels Oracle SQL Developer.
Ich bin mit den Verfahren zu Durchlaufen Spalte mit neuen Sequenz von zahlen in Varchar-format für diejenigen, die null-Werte.
Aber ich bekomme den Fehler, so a) kann ich getan haben, einen falschen Ansatz b) syntax nicht korrekt ist, da die version verwendet. Ich bin in Erster Linie Oracle-Benutzer.
Error ich erhalte immer: SQL Error: Incorrect syntax near the keyword 'End'.
was nicht hilfreich genug, um es fix. Die End
bezieht sich auf die letzten 'End' in der Prozedur.
Jegliche Hilfe würde sehr geschätzt werden.
Hier der Ablauf.
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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihnen fehlt ein
begin
direkt nach derWHILE
. Sie eingerückt, wie Sie möchten, dass ein block (mehrere Anweisungen) in der while-Schleife, und haben sogar eineend
für diewhile
, aber keinebegin
.machen:
FETCH NEXT FROM MyCur INTO @a
. so müssen Sie deklarieren eine lokale variable @a vorher und dann ändern ...+ ' where current of ' + MyCur
zu ...+ ' where current of ' + @a
BEGIN
Aussage könnte irgendwo im code vor dem Fehler. Ich fand eine vermisst, nachdem eine verschachtelte wenn-in meinem eigenen code. Nie das weniger, diese Antwort vorgeschlagen, was Sie suchen.