sql >> Databáze >  >> RDS >> Sqlserver

Průvodce generováním skriptu SQL Server 2008 mi dává skript, jehož výsledkem jsou neuzavřené uvozovky

Řešení problému s importem serveru SQL Server

Předběžná podmínka

Chcete-li přesunout data z jednoho SQL Serveru do druhého (např. z produkčního prostředí do testovacího prostředí), má smysl použít funkci "Generovat skripty", která je dostupná v možnostech databáze v SQL Server Management Studio. Výsledkem této operace je textový soubor s SQL příkazy, které lze spustit na jiném SQL serveru. Obvykle jsou tyto soubory příliš velké na to, aby je bylo možné spustit v SQL Server Management Studio, takže musíme použít sqlcmd nástroj příkazového řádku z instalačního balíčku SQL Server. Ve většině případů nástroj funguje hladce a další uživatelské akce nejsou nutné.

Popis problému

V některých vzácných případech sqlcmd nástroj může selhat při importu a vyvolat následující chybu:"Uzavřené uvozovky za znakovým řetězcem...", což znamená, že jeden z SQL dotazů nebyl proveden. K tomu dochází, protože sqlcmd pracuje pomocí zpracování toku, tj. načte nějaký kus dat, zpracuje je, načte další kus a tak dále. V některých případech může vstupní soubor obsahovat velkou instrukci SQL, jejíž velikost je větší než množství dat, které by mohl zpracovat sqlcmd najednou, takže sqlcmd se pokusí provést nefunkční SQL a selže.

Možná řešení

K vyřešení tohoto problému lze použít 2 přístupy:

  • sqlcmd obslužný program může přijmout parametr "-a", který definuje maximální velikost paketu (části dat), který bude použit během zpracování. Maximální hodnota je 32767, výchozí hodnota je 4096, takže má smysl používat tento parametr vždy s maximální hodnotou.

    sqlcmd -i input.sql -a 32767 -o import_log.txt
    
  • Pokud první přístup nepomohl a problém se stále objevuje, existuje další, obtížnější řešení:

    • Nainstalujte Cygwin
      • Během instalace se po několika standardních obrazovkách zastavte na obrazovce „Vybrat balíčky“
      • Do pole „Hledat“ zadejte „sed“ a ve stromové struktuře níže rozbalte kategorii „Základní“ a pro instalaci vyberte verzi ne nižší než 4.2.2
      • Dokončete instalaci
      • Poznámka:"sed" je nástroj systému Linux, který umožňuje zpracování souborů na základě proudu
    • Po dokončení instalace spusťte "Cygwin64 Terminal" z plochy. Použijeme jej pro další kroky
    • Přejděte do adresáře, kde se nachází soubor SQL vygenerovaný aplikací SQL Server Management Studio. Musíte použít lomítka ve stylu Linuxu "/" místo stylu Windows, což je "\"

        cd d:/temp
      
    • Změňte kódování souboru SQL z UTF-16LE na UTF-8, protože „sed“ neumí zpracovat UTF-16LE, tento převod je pro data bezpečný. Výsledkem bude nový soubor, který použijeme v dalším kroku

        iconv -f UTF-16LE -t UTF-8 input.sql > input_utf8.sql
      
    • Převeďte nový soubor, aby měl jeden SQL dotaz v jedné dávce. Výsledkem bude nový soubor, který použijeme v dalším kroku

        sed -e 's/^INSERT/GO\nINSERT/' input_utf8.sql > input_utf8_adapted.sql
      
    • Nyní by měl být soubor "input_utf8_adapted.sql" zpracován sqlcmd bez problémů, takže můžeme provést následující:

        sqlcmd -i input_utf8_adapted.sql -a 32767 -o import_log.txt
      
    • Po dokončení spuštění zkontrolujte soubor import_log.txt a ujistěte se, že se neobjevily žádné chyby



  1. Problémy s kódováním PHP + MySQL pro portugalštinu (PT-Br)

  2. Datové typy Oracle

  3. Jak se připojím k databázi SQL Server 2008 pomocí JDBC?

  4. mysql - vyberte hodinu v datetime a skupině