¿Por qué bcp genera un resultado nulo cuando la columna contiene una cadena vacía y una cadena vacía cuando la columna es nula?

StackOverflow https://stackoverflow.com/questions/1644731

  •  10-07-2019
  •  | 
  •  

Pregunta

Esto me pareció un comportamiento realmente extraño y pasé un tiempo buscando errores en mi código antes de encontrar esto

" saca copias de la tabla o vista de la base de datos a un archivo. Si especifica un archivo existente, el archivo se sobrescribe. Al extraer datos, tenga en cuenta que la utilidad bcp representa una cadena vacía como nula y una cadena nula como una cadena vacía. & Quot; (de http://msdn.microsoft.com/en-us/library/ms162802 .aspx )

Obviamente, esto me permitió solucionar mi problema, pero ¿alguien puede pensar o alguien sabe por qué es así?

¿Fue útil?

Solución

Ha pasado algún tiempo, pero estoy seguro de que es una compatibilidad con versiones anteriores / legado de regreso a SQL Server 6.5

SQL Server 6.5 no pudo almacenar una cadena vacía: siempre había un espacio. Esto cambió con SQL 7

Entonces '' - > NULL y '' - > '' es correcto desde la perspectiva de la historia antigua.

Otros consejos

SELECT ARTICULO as Articulo, 
        case when rtrim(CCOLOR) = '' then null else rtrim(CCOLOR) end as Color, 
        case when rtrim(TALLE) = '' then null else rtrim(TALLE) end as Talle,
from precios

Enviar nulo en lugar de vacío.

Encuentro la mejor solución aquí:

https: // bytes .com / topic / sql-server / answers / 143738-bcp-inserting-blank-space-empty-string

  

Encontré una solución, usando una estructura Case en la consulta sql para   cambia la cadena vacía a nula. El BCP a su vez genera el resultado   nulo como un vacío!   Gracias por tu ayuda.   Eric

Esto está relacionado con los "valores predeterminados" sección para BCP:

https://docs.microsoft.com/en-us/sql/relational-databases/import-export/keep-nulls-or-use-default-values-during-bulk -import-sql-server

  

Por ejemplo, si hay un campo nulo en un archivo de datos, el valor predeterminado para la columna se carga en su lugar.

Tienes que pensar en los días en que importabas archivos de texto sin formato de otros sistemas extraños. BCP traduce '' como " no definido " (= datos faltantes) y establece un NULL en la base de datos (= datos faltantes). Al revés, un NULL de la base de datos debe ser un '' para los otros sistemas.

Para obtener los datos 'reales' de la base de datos, use el conmutador -k :

https://docs.microsoft.com/en-us/sql/relational-databases/import-export/keep-nulls-or-use-default-values-during -bulk-import-sql-server # keep_nulls

  

Los siguientes calificadores especifican que un campo vacío en el archivo de datos conserva su valor nulo durante la operación de importación masiva, en lugar de heredar un valor predeterminado (si lo hay) para las columnas de la tabla.

Entonces tienes tu ASCII 0x0 en tu archivo / base de datos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top