¿Cómo se importa un gran archivo .sql de MS SQL?

240

Utilizo la comparación de datos SQL de RedGate y generé un archivo .sql, para poder ejecutarlo en mi máquina local. Pero el problema es que el archivo tiene más de 300 MB, lo que significa que no puedo copiar y pegar porque el portapapeles no podrá manejarlo, y cuando intento abrir el archivo en SQL Server Management Studio, aparece un error sobre que el archivo es demasiado grande.

¿Hay alguna manera de ejecutar un archivo .sql grande? El archivo básicamente contiene datos para dos tablas nuevas.

Jack
fuente

Respuestas:

442

Desde el símbolo del sistema, inicie sqlcmd:

sqlcmd -S <server> -i C:\<your file here>.sql 

Simplemente reemplácelo <server>con la ubicación de su cuadro SQL y <your file here>con el nombre de su script. No olvide que si está utilizando una instancia de SQL, la sintaxis es:

sqlcmd -S <server>\instance.

Aquí está la lista de todos los argumentos que puede pasar sqlcmd:

Sqlcmd            [-U login id]          [-P password]
  [-S server]            [-H hostname]          [-E trusted connection]
  [-d use database name] [-l login timeout]     [-t query timeout] 
  [-h headers]           [-s colseparator]      [-w screen width]
  [-a packetsize]        [-e echo input]        [-I Enable Quoted Identifiers]
  [-c cmdend]            [-L[c] list servers[clean output]]
  [-q "cmdline query"]   [-Q "cmdline query" and exit] 
  [-m errorlevel]        [-V severitylevel]     [-W remove trailing spaces]
  [-u unicode output]    [-r[0|1] msgs to stderr]
  [-i inputfile]         [-o outputfile]        [-z new password]
  [-f  | i:[,o:]] [-Z new password and exit] 
  [-k[1|2] remove[replace] control characters]
  [-y variable length type display width]
  [-Y fixed length type display width]
  [-p[1] print statistics[colon format]]
  [-R use client regional setting]
  [-b On error batch abort]
  [-v var = "value"...]  [-A dedicated admin connection]
  [-X[1] disable commands, startup script, environment variables [and exit]]
  [-x disable variable substitution]
  [-? show syntax summary] 
Ray Booysen
fuente
1
Tengo un poco de inserción como: INSERT INTO table_name (text) VALUES ('some text bla bla 'bla' text'). Tengo un error con las comillas. Entonces, ¿qué debo usar (qué parámetro) para manejar este error? Gracias
Oleksandr Fentsyk
1
¿Podemos mantener el script en un disco externo? Como E: conducir? en lugar de C drive?
Ani
10
Simplemente confirmando que acabo de ejecutar un archivo sql de 1GB usando este comando
Loupax
11
Esto funcionó para mí, pero tuve que deshacerme del -o al final
bunggo
2
no pudo ejecutar el archivo 75G sql.
Aladdin
62

Tuve exactamente el mismo problema y había estado luchando por un tiempo, luego finalmente encontré la solución que consiste en establecer el -aparámetro sqlcmden para cambiar su tamaño de paquete predeterminado:

sqlcmd -S [servername] -d [databasename] -i [scriptfilename] -a 32767
Takuro
fuente
44
+1 para agregar la opción -d en el ejemplo. Usé "USE [DBNAME]" en mi archivo sql. Esto funcionó también. No estoy seguro de cuál es el método mejor o preferido
Shaakir
3
Gracias. Usé el siguiente comando como nombre de usuario y contraseña necesarios para conectarme a la base de datos. sqlcmd -S <Servername> -U <Username> -P <password> -d <Databasename> -i <filename>
Hriju
1
¿Qué problema resolvió al configurar el tamaño del paquete? Microsoft dice: "Un tamaño de paquete más grande puede mejorar el rendimiento ..." ( docs.microsoft.com/en-us/sql/tools/sqlcmd-utility )
El increíble enero
20

Puedes usar esta herramienta también. Es realmente útil

BigSqlRunner

Yigit Yuksel
fuente
Pensé que también era útil, hasta que lo ejecuté con un archivo SQL de 400 MB (lleno de instrucciones INSERT). Después de funcionar durante 9 horas, no se había agregado nada a la base de datos, pero BigSqlRunner consumía entre 3 GB y 6 GB de memoria.
Martijn
Muy útil. Por lo general, divido manualmente el archivo (varias herramientas) en fragmentos, luego los edito manualmente para que las instrucciones sql sean "completas", luego las ejecuto a través de un script por lotes. Esto lo hace TAN fácil. Archivo de 2.3 gb .sql, fácil.
Barry
14
  1. Tomar el símbolo del sistema con privilegio de administrador

  2. Cambie el directorio a donde estaba almacenado el archivo .sql

  3. Ejecute el siguiente comando

    sqlcmd -S 'your server name' -U 'user name of server' -P 'password of server' -d 'db name'-i script.sql

Syam Kumar
fuente
7

Estoy usando MSSQL Express 2014 y ninguna de las soluciones funcionó para mí. Todos simplemente bloquearon SQL. Como solo necesitaba ejecutar un script único con muchas instrucciones de inserción simples, lo solucioné escribiendo una pequeña aplicación de consola como último recurso:

class Program
{
    static void Main(string[] args)
    {
        RunScript();
    }

    private static void RunScript()
    {
        My_DataEntities db = new My_DataEntities();

        string line;

        System.IO.StreamReader file =
           new System.IO.StreamReader("c:\\ukpostcodesmssql.sql");
        while ((line = file.ReadLine()) != null)
        {
            db.Database.ExecuteSqlCommand(line);
        }

        file.Close();
    }
}
Animus Miles-Militis
fuente
2

Tuve un problema similar Mi archivo con script sql tenía más de 150 MB de tamaño (con casi 900k de INSERT s muy simples ). Utilicé la solución aconsejada por Takuro (como la respuesta en esta pregunta) pero aún recibí un mensaje de error que decía que no había suficiente memoria ("No hay suficiente memoria del sistema en el grupo de recursos 'interno' para ejecutar esta consulta").

Lo que me ayudó fue que puse el comando GO después de cada 50k INSERT s.

(No está abordando directamente la pregunta (tamaño del archivo) pero creo que resuelve el problema que está indirectamente conectado con el gran tamaño del script sql en sí. En mi caso, muchos comandos de inserción)

Bronek
fuente
1

Tu pregunta es bastante similar a esta

Puede guardar su archivo / script como .txt o .sql y ejecutarlo desde Sql Server Management Studio (creo que el menú es Abrir / Consultar, luego simplemente ejecute la consulta en la interfaz SSMS). Es posible que deba actualizar la primera línea, que indica la base de datos que se creará o seleccionará en su máquina local.

Si tiene que hacer esta transferencia de datos con mucha frecuencia, puede optar por la replicación. Dependiendo de sus necesidades, la replicación de instantáneas podría estar bien. Si tiene que sincronizar los datos entre sus dos servidores, podría optar por un modelo más complejo, como la replicación de mezcla.

EDITAR: No me di cuenta de que tenía problemas con SSMS vinculado al tamaño del archivo. Luego, puede ir a la línea de comandos, según lo propuesto por otros, replicación de instantáneas (publicar en su servidor principal, suscribirse en su servidor local, replicar y luego cancelar la suscripción) o incluso hacer una copia de seguridad / restaurar

Philippe Grondier
fuente
3
Jack mencionó que no puede hacerlo desde SSMS ya que el archivo es demasiado grande.
Ray Booysen
1

El archivo básicamente contiene datos para dos tablas nuevas.

Entonces puede resultarle más simple simplemente DTS (o SSIS, si se trata de SQL Server 2005+) los datos, si los dos servidores están en la misma red.

Si los dos servidores no están en la misma red, puede hacer una copia de seguridad de la base de datos de origen y restaurarla en una nueva base de datos en el servidor de destino. Luego puede usar DTS / SSIS, o incluso un simple INSERT INTO SELECT, para transferir las dos tablas a la base de datos de destino.

Papi
fuente
Si una o dos tablas generan un archivo tan grande, es seguro asumir que el DB es un par de Gigs, lo que hace que la copia de seguridad y la restauración no sean factibles en muchos casos.
Capitán Kenpachi el
1

Espero que esto te ayude!

sqlcmd -u UserName -s <ServerName\InstanceName> -i U:\<Path>\script.sql
ortegatorres 10
fuente
1
-U <nombre de usuario> -P <contraseña> Los comandos de opción deben estar en mayúscula y no en minúscula
eric xu
0

Me he encontrado con el mismo problema e invertí todo un día para encontrar la salida, pero esto se resuelve al hacer la copia del archivo .sql y cambiar la extensión al archivo .txt y abrir el archivo .txt en el navegador Chrome. He visto la magia y el archivo se abre en un navegador.

Gracias y un saludo,

hussainsaboor
fuente