Lösning för SQL Server-importproblemet
Förutsättning
För att flytta data från en SQL Server till en annan (t.ex. från produktionsmiljö till testmiljö) är det vettigt att använda funktionen "Generera skript" som är tillgänglig i databasalternativ i SQL Server Management Studio. Resultatet av denna operation är en textfil med SQL-kommandon som kan köras på en annan SQL Server. Vanligtvis är dessa filer för stora för att köra dem i SQL Server Management Studio, så vi måste använda sqlcmd kommandoradsverktyg från installationspaketet för SQL Server. I de flesta fall fungerar verktyget smidigt och ytterligare användaråtgärder är inte nödvändiga.
Problembeskrivning
I vissa sällsynta fall sqlcmd verktyget kan misslyckas med importen och visa följande fel:"Ostängt citattecken efter teckensträngen ..." som indikerar att en av SQL-frågorna inte har körts. Detta händer eftersom sqlcmd fungerar med strömbearbetning, dvs den läser en del data, bearbetar den, läser nästa bit och så vidare. I vissa fall kan en indatafil innehålla enorma SQL-instruktioner som är större än mängden data som kan bearbetas av sqlcmd åt gången, så sqlcmd försöker köra trasig SQL och misslyckas.
Möjliga lösningar
För att lösa detta problem kan två metoder användas:
-
sqlcmd verktyget kan acceptera parametern "-a" som definierar den maximala storleken på paketet (databit) som kommer att användas under bearbetningen. Maxvärdet är 32767, standardvärdet är 4096, så det är vettigt att alltid använda denna parameter med maximalt värde.
sqlcmd -i input.sql -a 32767 -o import_log.txt
-
Om det första tillvägagångssättet inte hjälpte och problemet fortfarande dyker upp finns det en annan, svårare lösning:
- Installera Cygwin
- Under installationen, efter några standardskärmar, stannar du på skärmen "Välj paket"
- I fältet "Sök", skriv in "sed", och expandera kategorin "Bas" i trädet nedan och välj inte mindre än version 4.2.2 för installation
- Slutför installationen
- Obs:"sed" är Linux-verktyget som tillåter strömbaserad filbehandling
- När installationen är klar, kör "Cygwin64 Terminal" från skrivbordet. Vi kommer att använda det för nästa steg
-
Gå till katalogen där SQL-filen som genereras av SQL Server Management Studio finns. Du måste använda snedstreck "/" i Linux-stil istället för Windows-stil som är "\"
cd d:/temp
-
Ändra kodningen av SQL-filen från UTF-16LE till UTF-8, eftersom "sed" inte kan bearbeta UTF-16LE, denna konvertering är säker för data. Resultatet blir en ny fil som vi kommer att använda i nästa steg
iconv -f UTF-16LE -t UTF-8 input.sql > input_utf8.sql
-
Konvertera den nya filen för att ha en SQL-fråga i en batch. Resultatet blir en ny fil som vi kommer att använda i nästa steg
sed -e 's/^INSERT/GO\nINSERT/' input_utf8.sql > input_utf8_adapted.sql
-
Nu ska filen "input_utf8_adapted.sql" bearbetas av sqlcmd utan några problem, så vi kan utföra följande:
sqlcmd -i input_utf8_adapted.sql -a 32767 -o import_log.txt
-
När körningen är klar, kontrollera import_log.txt för att säkerställa att inga fel uppstod
- Installera Cygwin