Решение за проблема с импортирането на SQL Server
Предварително условие
За да преместите данните от един SQL Server в друг (напр. от производствена среда в тестова среда), има смисъл да използвате функцията „Генериране на скриптове“, която е налична в опциите за база данни в SQL Server Management Studio. Резултатът от тази операция е текстов файл с SQL команди, които могат да бъдат изпълнени на друг SQL Server. Обикновено тези файлове са твърде големи, за да ги изпълним в SQL Server Management Studio, така че трябва да използваме sqlcmd помощна програма за команден ред от инсталационния пакет на SQL Server. В повечето случаи помощната програма работи гладко и не са необходими допълнителни потребителски действия.
Описание на проблема
В някои редки случаи sqlcmd помощната програма може да се провали с импортирането и да предизвика следната грешка:„Незатворени кавички след символния низ ...“, което показва, че една от SQL заявките не е била изпълнена. Това се случва, защото sqlcmd работи с помощта на поточна обработка, т.е. чете част от данните, обработва ги, чете следващата част и т.н. В някои случаи входният файл може да съдържа огромна SQL инструкция, чийто размер е по-голям от количеството данни, които могат да бъдат обработени от sqlcmd наведнъж, така че sqlcmd се опитва да изпълни повреден SQL и не успява.
Възможни решения
За да се коригира този проблем, могат да се използват 2 подхода:
-
sqlcmd помощната програма може да приеме параметъра "-a", който определя максималния размер на пакета (част от данни), който ще се използва по време на обработката. Максималната стойност е 32767, стойността по подразбиране е 4096, така че има смисъл винаги да използвате този параметър с максимална стойност.
sqlcmd -i input.sql -a 32767 -o import_log.txt
-
Ако първият подход не е помогнал и проблемът все още се появява, има друго, по-трудно решение:
- Инсталирайте Cygwin
- По време на инсталацията, след някои стандартни екрани, спрете на екрана „Избор на пакети“
- В полето „Търсене“ въведете „sed“ и в дървото по-долу разгънете категорията „Базова“ и изберете версия не по-малка от 4.2.2 за инсталиране
- Пълна инсталация
- Забележка:"sed" е помощната програма на Linux, която позволява базирана на поток обработка на файлове
- След като инсталацията приключи, стартирайте „Cygwin64 Terminal“ от работния плот. Ще го използваме за следващите стъпки
-
Отидете в директорията, където се намира SQL файлът, генериран от SQL Server Management Studio. Трябва да използвате наклонени черти в стила на Linux "/" вместо стила на Windows, който е "\"
cd d:/temp
-
Променете кодирането на SQL файла от UTF-16LE на UTF-8, тъй като "sed" не може да обработва UTF-16LE, това преобразуване е безопасно за данните. Резултатът ще бъде нов файл, който ще използваме в следващата стъпка
iconv -f UTF-16LE -t UTF-8 input.sql > input_utf8.sql
-
Преобразувайте новия файл, за да имате една SQL заявка в една партида. Резултатът ще бъде нов файл, който ще използваме в следващата стъпка
sed -e 's/^INSERT/GO\nINSERT/' input_utf8.sql > input_utf8_adapted.sql
-
Сега файлът "input_utf8_adapted.sql" трябва да бъде обработен от sqlcmd без никакви проблеми, така че можем да изпълним следното:
sqlcmd -i input_utf8_adapted.sql -a 32767 -o import_log.txt
-
След като изпълнението приключи, моля, проверете import_log.txt, за да се уверите, че няма грешки
- Инсталирайте Cygwin