2011-05-06 18 views
7

Estoy tratando de usar sqlcmd en una máquina de Windows que ejecuta SQL Server 2005 para escribir una consulta en un archivo csv. Las opciones de línea de comandos que normalmente utilizamos son:sqlcmd - ¿Cómo superar el límite de longitud de columna sin espacios vacíos?

-l 60 -t 300 -r 1 -b -W -h -1 

Sin embargo, las columnas se quedan truncados a 256 bytes. En un intento por evitar esto, he intentado usar esta opción de línea de comandos en lugar del -W:

-y 8000 

Esto captura los campos enteros, pero el problema con este método es que el archivo de globos hasta poco más de 1 MB que aproximadamente 200mb debido a todo el espacio extra (me doy cuenta de que 8000 es probablemente excesivo, pero probablemente tendrá que ser de al menos 4000 y actualmente solo estoy trabajando con un pequeño subconjunto de datos). La opción -W generalmente elimina todo este espacio extra, pero cuando intento usarlos juntos, me dice que son mutuamente exclusivos.

¿Hay alguna manera de obtener sqlcmd alrededor de este límite, o alguien sabe si otro programa (como bcp o osql) lo haría más fácil?


Editar: Éstos son los fragmentos de código que estamos usando para obtener el campo que está siendo truncado (código similar se utiliza para un grupo de campos):

SELECT ALIASES.AliasList as complianceAliases,  

. ..

LEFT OUTER JOIN (Select M1.ID, M1.LIST_ID,stuff((SELECT '{|}' + isnull(Content2,'')+' '+isnull(Content3,'')+' '+isnull(Content4,'')+' '+isnull(Content5,'')+' '+isnull(Content6,'')+' '+isnull(Content7,'') 
            FROM fs_HOST3_TEST_web.ISI_APP_COMP_MULTI M2 with (nolock) 
            WHERE M1.LIST_ID = M2.LIST_ID and M1.ID = M2.ID and M1.TYPE = M2.TYPE          
            FOR XML PATH('') 
           ),1,1,'') as AliasList 
      FROM fs_HOST3_TEST_web.ISI_APP_COMP_MULTI M1 with (nolock) 
      WHERE M1.LIST_ID = 2001 AND M1.TYPE = 'Aliases' 
      GROUP BY m1.list_id,m1.ID,m1.Type) as ALIASES 
      ON ALIASES.LIST_ID = PAIR.COMP_LIST_ID AND ALIASES.ID = PAIR.COMP_ID 
+0

¿Qué tipo de datos son los datos truncados, por favor? – gbn

+0

Estamos concatenando múltiples campos nvarchar (500) en un solo campo usando una combinación de la función stuff y el comando FOR XML PATH. No estoy realmente seguro de cómo funcionan exactamente (encontramos la solución a través de Google), pero terminamos con todos ellos en el mismo campo y los estamos sacando a través de una declaración seleccionada. Editaré la respuesta e incluiré el código. –

Respuesta

12

Terminé resolviendo esto utilizando el argumento "-y0". Todavía dejó un montón de espacios en blanco, pero parece que solo llegó al final de la información más larga en cada campo.

Luego ejecuté la salida a través de un programa que eliminó espacios repetitivos y que resolvió todos los problemas.

+0

Me pregunto si hay una manera mejor desde entonces. Buscando horas ahora ... – Adam

Cuestiones relacionadas