열이 빈 문자열이 포함되어있을 때 BCP 출력이 널 늘어나는 이유는 무엇입니까?

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

  •  10-07-2019
  •  | 
  •  

문제

이것은 정말 이상한 행동으로 나를 때렸고 나는 이것을 찾기 전에 내 코드에서 버그를 확인하는 데 잠시 시간을 보냈습니다.

"데이터베이스 테이블의 사본 또는 파일보기. 기존 파일을 지정하면 파일이 덮어 쓰기됩니다. 데이터를 추출 할 때 BCP 유틸리티는 빈 문자열을 널로, 널 문자열을 빈 문자로 나타냅니다. " (에서 http://msdn.microsoft.com/en-us/library/ms162802.aspx)

분명히 이것은 내가 내 문제를 해결할 수 있었지만 아무도 이것이 왜 그런지에 대한 이유를 생각하거나 알 수 있습니까?

도움이 되었습니까?

해결책

시간이 지났지 만 SQL Server 6.5로 돌아가는 거꾸로 호환성/레거시라고 확신합니다.

SQL Server 6.5는 빈 문자열을 저장할 수 없었습니다. 항상 하나의 공간이있었습니다. 이것은 SQL 7으로 변경되었습니다

그래서 '' -> NULL 그리고 ' ' -> '' 고대 역사 관점에서 정확합니다.

다른 팁

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

보내다 null 빈 대신.

여기에서 가장 좋은 솔루션을 찾습니다.

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

SQL 쿼리의 케이스 구조를 사용하여 빈 문자열을 널로 변경하는 작업을 찾았습니다. BCP는 차례로 결과 Null을 비어있는 것으로 출력합니다! 도움을 주셔서 감사합니다. 에릭

이것은 BCP의 "기본값"섹션과 관련이 있습니다.

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

예를 들어, 데이터 파일에 NULL 필드가 있으면 열의 기본값이 대신로드됩니다.

다른 이상한 시스템에서 일반 텍스트 파일을 가져 오는 날로 거슬러 올라갑니다. BCP는 번역됩니다 '' "정의되지 않았다"(= 누락 된 데이터)로서 데이터베이스에서 null을 설정합니다 (= 누락). 데이터베이스에서 널 주변의 다른 방법은 '' 다른 시스템의 경우.

데이터베이스에서 '실제'데이터를 꺼내려면 -k 스위치:

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

다음 규정 당사는 데이터 파일의 빈 필드가 표 열의 기본값 (있는 경우)을 상속받지 않고 벌크 내포 작업 중에 널 값을 유지하도록 지정합니다.

그런 다음 파일/데이터베이스에 ASCII 0x0이 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top