열이 빈 문자열이 포함되어있을 때 BCP 출력이 널 늘어나는 이유는 무엇입니까?
-
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의 "기본값"섹션과 관련이 있습니다.
예를 들어, 데이터 파일에 NULL 필드가 있으면 열의 기본값이 대신로드됩니다.
다른 이상한 시스템에서 일반 텍스트 파일을 가져 오는 날로 거슬러 올라갑니다. BCP는 번역됩니다 ''
"정의되지 않았다"(= 누락 된 데이터)로서 데이터베이스에서 null을 설정합니다 (= 누락). 데이터베이스에서 널 주변의 다른 방법은 ''
다른 시스템의 경우.
데이터베이스에서 '실제'데이터를 꺼내려면 -k
스위치:
다음 규정 당사는 데이터 파일의 빈 필드가 표 열의 기본값 (있는 경우)을 상속받지 않고 벌크 내포 작업 중에 널 값을 유지하도록 지정합니다.
그런 다음 파일/데이터베이스에 ASCII 0x0이 있습니다.