2010-03-11 9 views
5

Tengo un archivo de texto (txt) que contiene texto formateado (solo saltos de línea, retornos de carro y pestañas) También contiene caracteres en alemán.SQL Server 2008 - En masa Inserte un archivo de texto completo en un campo

Quiero utilizar el comentario de inserción masiva en T-SQL para leer en el archivo de texto en un campo dentro de una tabla de base de datos.

que corrió este comando:

CREATE TABLE #MyTestTable (
    MyData NVARCHAR(MAX) 
) 

BULK INSERT [#MyTestTable] 
FROM 'D:\MyTextFile.txt' 

SELECT * FROM #MyTestTable 

El problema es que se lee cada línea del archivo de texto en una nueva fila en la tabla temporal. Quiero que lea el archivo completo (formateo y todo) en una fila.

También parece que los caracteres del idioma alemán se han perdido, reemplazados por un carácter predeterminado no imprimible en la Vista de resultados.

Alguien alguna idea de cómo puedo lograr esto?

Gracias.

+0

Ok, una actualización -.. Si añado CON (ROWTERMINATOR = '' al comando consigo todo en una fila Los Símbolos lanugage alemanes se pierden sin embargo y creo que el formato ahora se ve mal –

Respuesta

5

Puede usar los parámetros ROWTERMINATOR y CODEPAGE. El terminador de fila predeterminado es '\ r \ n'. Para CODEPAGE, necesita conocer la codificación de su archivo sin formato y la clasificación predeterminada de su base de datos.

BULK INSERT [#MyTestTable] 
FROM 'D:\MyTextFile.txt' 
WITH (ROWTERMINATOR = '\0', 
     CODEPAGE = 'ACP') 

Véase también http://msdn.microsoft.com/en-us/library/ms188365.aspx

+0

Ok, he usado ROWTERMINATOR = '\ 0', CODEPAGE = 'ACP' y esto preserva los símbolos de idioma alemán y coloca todo el archivo en un campo. –

+0

Ok, editado para reflejar sus correcciones. – ercan

0
  • no utilice la inserción a granel. está hecho para tomar un registro por línea. Debes escribir el código.
  • Maneje correctamente la transición de su archivo de texto al código Unicode (nvarchar). la inserción masiva probablemente aplicó la página de códigos estándar, perdiendo sus caracteres.

Esto realmente llora por un trabajo de programación menor - una hora de trabajo más o menos, además de otras pruebas y el tiempo de ejecución que se necesita.

+0

*" está hecho para tomar un registro por línea "*. Incorrecto, hay parámetros para esto. – ercan

+0

TomTom - Estoy de acuerdo con usted en la mayoría de las circunstancias, es solo este caso particular que necesito para resolver este problema específico sin recurrir a CLR o código desplegado en un servidor. –

2

Utilice esta:

FIELDTERMINATOR = '|', 
ROWTERMINATOR = '\n' 

Dónde | es su delimitador de columna.

Cuestiones relacionadas