Løsning til SQL Server-importproblemet
Forudsætning
For at flytte data fra en SQL Server til en anden (f.eks. fra produktionsmiljø til testmiljø) giver det mening at bruge "Generer scripts"-funktionen, som er tilgængelig i databaseindstillinger i SQL Server Management Studio. Resultatet af denne operation er en tekstfil med SQL-kommandoer, der kan udføres på en anden SQL Server. Normalt er disse filer for store til at udføre dem i SQL Server Management Studio, så vi skal bruge sqlcmd kommandolinjeværktøj fra SQL Server-installationspakken. I de fleste tilfælde fungerer hjælpeprogrammet problemfrit, og yderligere brugerhandlinger er ikke nødvendige.
Problembeskrivelse
I nogle sjældne tilfælde er sqlcmd værktøjet kan mislykkes med importen og fremkalde følgende fejl:"Ulukket anførselstegn efter tegnstrengen ...", som angiver, at en af SQL-forespørgsler ikke er blevet udført. Dette sker fordi sqlcmd fungerer ved hjælp af strømbehandling, dvs. den læser et stykke data, behandler det, læser næste stykke og så videre. I nogle tilfælde kan en inputfil indeholde enorm SQL-instruktion, hvis størrelse er større end mængden af data, der kunne behandles af sqlcmd ad gangen, så sqlcmd forsøger at udføre ødelagt SQL og mislykkes.
Mulige løsninger
For at løse dette problem kan 2 metoder bruges:
-
sqlcmd værktøjet kan acceptere parameteren "-a", som definerer den maksimale størrelse på pakken (datastykke), der vil blive brugt under behandlingen. Den maksimale værdi er 32767, standardværdien er 4096, så det giver mening altid at bruge denne parameter med maksimal værdi.
sqlcmd -i input.sql -a 32767 -o import_log.txt
-
Hvis den første tilgang ikke hjalp, og problemet stadig opstår, er der en anden, vanskeligere løsning:
- Installer Cygwin
- Under installationen, efter nogle standardskærme, stop på skærmen "Vælg pakker"
- Indtast "sed" i feltet "Søg", og udvid kategorien "Base" i træet nedenfor, og vælg version ikke mindre end 4.2.2 til installation
- Fuldfør installationen
- Bemærk:"sed" er Linux-værktøjet, som tillader stream-baseret filbehandling
- Når installationen er fuldført, skal du køre "Cygwin64 Terminal" fra skrivebordet. Vi vil bruge det til de næste trin
-
Gå til den mappe, hvor SQL-filen, der er genereret af SQL Server Management Studio, er placeret. Du skal bruge skråstreger "/" i Linux-stil i stedet for Windows-stil, som er "\"
cd d:/temp
-
Skift kodningen af SQL-filen fra UTF-16LE til UTF-8, fordi "sed" ikke kan behandle UTF-16LE, denne konvertering er sikker for dataene. Resultatet bliver en ny fil, som vi vil bruge i næste trin
iconv -f UTF-16LE -t UTF-8 input.sql > input_utf8.sql
-
Konverter den nye fil for at have én SQL-forespørgsel i én batch. Resultatet bliver en ny fil, som vi vil bruge i næste trin
sed -e 's/^INSERT/GO\nINSERT/' input_utf8.sql > input_utf8_adapted.sql
-
Nu skulle filen "input_utf8_adapted.sql" behandles af sqlcmd uden problemer, så vi kan udføre følgende:
sqlcmd -i input_utf8_adapted.sql -a 32767 -o import_log.txt
-
Når eksekveringen er udført, skal du tjekke import_log.txt for at sikre, at der ikke opstod nogen fejl
- Installer Cygwin