7

के पास गलत वाक्यविन्यास इस SQL ​​Server 2000 प्रक्रिया के साथ मदद की आवश्यकता है। समस्या मुश्किल हो गई है क्योंकि मैं ओरेकल एसक्यूएल डेवलपर के माध्यम से परीक्षण प्रक्रिया कर रहा हूं।एसक्यूएल त्रुटि: कीवर्ड 'एंड'

मैं उन लोगों के लिए वर्चर प्रारूप में संख्याओं के नए अनुक्रम के साथ कॉलम को फिर से चलाने की प्रक्रिया चला रहा हूं जिनके पास शून्य मान हैं।

लेकिन मुझे त्रुटि मिल रही है, इसलिए ए) मैंने गलत दृष्टिकोण किया हो सकता है b) सिंटैक्स संस्करण के इस्तेमाल के कारण गलत है। मैं मुख्य रूप से ओरेकल उपयोगकर्ता हूं।

त्रुटि मुझे मिलती रहती है: 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

आप सही WHILE के बाद एक begin वंचित रह जाएंगे। आपने इंडेंट किया है जैसे आप लूप में एक ब्लॉक (एकाधिक कथन) चाहते हैं, और के लिए end भी है, लेकिन 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 @ ए' से आगे निकलने की आवश्यकता है। इसलिए, आपको पहले स्थानीय वैरिएबल @ ए घोषित करना होगा और उसके बाद ... '+' बदलें जहां '+ MyCur'' ... + + के वर्तमान जहां '+ @ a'' –