Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

SQL Server 2008 menghasilkan skrip wizard memberi saya skrip yang menghasilkan tanda kutip tidak tertutup

Solusi untuk Masalah Impor SQL Server

Prakondisi

Untuk memindahkan data dari satu SQL Server ke yang lain (misalnya dari lingkungan Produksi ke lingkungan Uji) masuk akal untuk menggunakan fitur "Buat skrip" yang tersedia dalam opsi basis data di SQL Server Management Studio. Hasil dari operasi ini adalah file teks dengan perintah SQL yang dapat dieksekusi pada SQL Server lain. Biasanya file ini terlalu besar untuk dieksekusi di SQL Server Management Studio, jadi kita perlu menggunakan sqlcmd utilitas baris perintah dari paket instalasi SQL Server. Dalam kebanyakan kasus, utilitas bekerja dengan lancar dan tindakan pengguna tambahan tidak diperlukan.

Deskripsi masalah

Dalam beberapa kasus yang jarang terjadi, sqlcmd utilitas dapat gagal dengan impor dan memunculkan kesalahan berikut:"Tanda kutip tidak tertutup setelah string karakter ..." yang menunjukkan bahwa salah satu kueri SQL belum dieksekusi. Ini terjadi karena sqlcmd bekerja menggunakan pemrosesan aliran, yaitu membaca beberapa bagian data, memprosesnya, membaca bagian berikutnya dan seterusnya. Dalam beberapa kasus, file input dapat berisi instruksi SQL besar yang ukurannya lebih besar dari jumlah data yang dapat diproses oleh sqlcmd sekaligus, jadi sqlcmd mencoba mengeksekusi SQL yang rusak dan gagal.

Kemungkinan solusi

Untuk memperbaiki masalah ini, 2 pendekatan dapat digunakan:

  • sqlcmd utilitas dapat menerima parameter "-a" yang menentukan ukuran maksimum paket (sepotong data) yang akan digunakan selama pemrosesan. Nilai maksimumnya adalah 32767, nilai defaultnya adalah 4096, jadi masuk akal untuk selalu menggunakan parameter ini dengan nilai maksimum.

    sqlcmd -i input.sql -a 32767 -o import_log.txt
    
  • Jika pendekatan pertama tidak membantu dan masalah masih muncul, ada solusi lain yang lebih sulit:

    • Instal Cygwin
      • Selama instalasi, setelah beberapa layar standar, berhenti di layar "Pilih paket"
      • Di bidang "Telusuri", masukkan "sed", dan di pohon di bawah ini perluas kategori "Dasar" dan pilih versi tidak kurang dari 4.2.2 untuk penginstalan
      • Selesaikan penginstalan
      • Catatan:"sed" adalah utilitas Linux yang memungkinkan pemrosesan file berbasis aliran
    • Setelah penginstalan selesai, jalankan "Terminal Cygwin64" dari desktop. Kami akan menggunakannya untuk langkah selanjutnya
    • Buka direktori tempat file SQL yang dihasilkan oleh SQL Server Management Studio berada. Anda perlu menggunakan garis miring gaya Linux "/" alih-alih gaya Windows yaitu "\"

        cd d:/temp
      
    • Ubah pengkodean file SQL dari UTF-16LE ke UTF-8, karena "sed" tidak dapat memproses UTF-16LE, konversi ini aman untuk data. Hasilnya akan menjadi file baru, yang akan kita gunakan pada langkah selanjutnya

        iconv -f UTF-16LE -t UTF-8 input.sql > input_utf8.sql
      
    • Konversikan file baru, untuk memiliki satu kueri SQL dalam satu kumpulan. Hasilnya akan menjadi file baru, yang akan kita gunakan pada langkah selanjutnya

        sed -e 's/^INSERT/GO\nINSERT/' input_utf8.sql > input_utf8_adapted.sql
      
    • Sekarang file "input_utf8_adapted.sql" harus diproses oleh sqlcmd tanpa masalah, sehingga kita dapat menjalankan yang berikut:

        sqlcmd -i input_utf8_adapted.sql -a 32767 -o import_log.txt
      
    • Setelah eksekusi selesai, periksa import_log.txt untuk memastikan tidak ada kesalahan yang muncul



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Buat tampilan dengan klausa ORDER BY

  2. Tidak dapat memuat file atau rakitan Microsoft.ReportViewer.WebForms.XmlSerializers

  3. Bagaimana Saya Menyisipkan Byte[] Ke dalam Kolom VARBINARY SQL Server

  4. SELECT max(x) mengembalikan nol; bagaimana saya bisa membuatnya kembali 0?

  5. Skalar UDF Inlining di SQL Server 2019