2012-04-20 15 views
6

Tengo un archivo de un archivo .sql que tiene aproximadamente 22,000 líneas de longitud. Es generado por otra cosa, pero básicamente solo contiene una declaración de actualización por línea.El archivo SQL largo ejecuta SQL Server sin memoria (22,000 líneas)

Aparece este error cuando ejecuto el archivo en SQL Server Management Studio.

No hay suficiente memoria del sistema en el fondo de recursos 'internos' a ejecutar esta consulta

creo que sólo hay que dividir el archivo esta consulta, pero no estoy seguro de la mejor manera de hazlo. Podría cortar el archivo en 2000 líneas o algo así, supongo.

Parece un problema simple, y lo haré con la suficiente frecuencia. Me gustaría encontrar una buena solución. ¿Algunas ideas?

+2

22000 actualizaciones parece que algo no se está haciendo bien. No hay forma de hacer de esto una operación más basada en conjuntos? –

+0

Bueno, se creó a partir de una hoja de cálculo de Excel que crea una herramienta muy especializada.La hoja de cálculo tiene líneas X que necesitan actualizar las filas correspondientes en la base de datos, pero esta es una herramienta muy antigua y solo se exporta a Excel. – BurntToast

+4

Tu vida apesta. :) Excel es la perdición de cualquier DBA. –

Respuesta

5

Es posible que desee buscar ejecutar el script a través del SQLCMD en lugar de pasar por la interfaz de la interfaz gráfica de usuario de SSMS.

3

Probablemente esté alcanzando un límite en el tamaño del lote, por lo que SQL Server tiene problemas para analizar el lote. Si puedes correr en unos ~ 5000 tramos de línea (resaltar, ejecutar), eso confirmaría mi teoría.

Una vez conocido el tamaño del lote correcta hacia abajo, usted puede:

  1. instrucciones de inserción Entra en medio, para forzar un nuevo lote
  2. divididos en varios archivos de

Un poco de cáscara scripting debería ser suficiente para cualquiera de los dos. El UnxUtils de split, head y tail debería resultar útil.

2

Tuve un problema similar y ejecutar debajo del comando en el símbolo del sistema desde blog me salvó.

sqlcmd -S YOURSQLSERVER\INSTANCENAME -i "C:\Your Script.sql" 
0

Puede asignar más memoria a su servidor, con esta solución:

  1. En el Explorador de objetos, haga clic en un servidor y seleccione Propiedades.
  2. Haga clic en el nodo Memoria.
  3. En Opciones de memoria del servidor, ingrese la cantidad que desea para Memoria mínima del servidor y memoria máxima del servidor.

El valor máximo predeterminado es de 2147483647, lo cambio a 9147483647 y se solucionó el problema.