SQL "IF", "BEGIN", "END", "END IF"?

Sama sekali bukan orang SQL. Memiliki kode berikut yang ditulis konsultan.

Pertama, memastikan hanya sekolah dasar yang dipilih - kemudian, setelah BEGIN, jika variabel @Term sama dengan 3, kami ingin melakukan hal-hal di bawah pernyataan IF itu. Inilah masalahnya. Ketika @Term tidak = 3, kita masih ingin turun ke bawah dan melakukan INSERT KEDUA ke bagian @Classes. FYI - Term adalah = 3 ketika ini dijalankan, tetapi tidak melakukan kedua INSERT's - haruskah ada END IF di akhir bagian "IF @Term = 3 &" bukan hanya END biasa?

IF @SchoolCategoryCode = 'Elem' 

--- We now have determined we are processing an elementary school...

BEGIN

---- Only do the following if the variable @Term equals a 3 - if it does not, skip just this first part

    IF @Term = 3

    BEGIN

        INSERT INTO @Classes

        SELECT      
        XXXXXX  
        FROM XXXX blah blah blah

    END   <----(Should this be ENDIF?)

---- **always** "fall thru" to here, no matter what @Term is equal to - always do the following INSERT for all elementary schools

    INSERT INTO @Classes    
    SELECT
    XXXXXXXX    
    FROM XXXXXX (more code) 

END

Jika ini adalah MS Sql Server, maka apa yang Anda miliki seharusnya berfungsi dengan baik... Bahkan, secara teknis, Anda tidak memerlukan Begin & End sama sekali, karena hanya ada satu pernyataan di blok begin-End... (Saya asumsikan @Classes adalah variabel tabel?)

If @Term = 3
   INSERT INTO @Classes
    SELECT                  XXXXXX  
     FROM XXXX blah blah blah
-- -----------------------------

 -- This next should always run, if the first code did not throw an exception... 
 INSERT INTO @Classes    
 SELECT XXXXXXXX        
 FROM XXXXXX (more code)
Komentar (0)

Jika saya ingat dengan benar, dan lebih sering saya lakukan ... tidak ada dukungan END IF di Transact-Sql. BEGIN dan END harus melakukan pekerjaan itu. Apakah Anda mendapatkan error?

Komentar (0)

Berdasarkan deskripsi Anda tentang apa yang ingin Anda lakukan, kodenya tampaknya benar seperti apa adanya. ENDIF bukanlah kata kunci kontrol loop SQL yang valid. Apakah Anda yakin bahwa INSERTS benar-benar menarik data untuk dimasukkan ke dalam @Class? Faktanya, jika itu buruk, itu tidak akan berjalan.

Apa yang mungkin ingin Anda coba adalah meletakkan beberapa pernyataan PRINT di sana. Letakkan PRINT di atas setiap INSERTS hanya mengeluarkan beberapa teks konyol untuk menunjukkan bahwa baris tersebut sedang dijalankan. Jika Anda mendapatkan kedua output, maka SELECT...INSERT... Anda dicurigai. Anda juga bisa melakukan SELECT sebagai pengganti PRINT (yaitu, tanpa INSERT) dan melihat dengan tepat data apa yang ditarik.

Komentar (0)