這讓我感到非常奇怪的行爲,我花了一段時間檢查我的代碼中的錯誤之前,我發現這當列爲空時,爲什麼bcp輸出爲null,而列爲空時爲空?
「從數據庫表或視圖複製到一個文件如果指定一個現有的文件,文件在提取數據時,請注意bcp實用程序將空字符串表示爲空字符串,並將空字符串表示爲空字符串。 (從http://msdn.microsoft.com/en-us/library/ms162802.aspx)
很明顯,這使我能夠解決我的問題,但任何人都可以想到或有人知道爲什麼會出現這種情況?
這讓我感到非常奇怪的行爲,我花了一段時間檢查我的代碼中的錯誤之前,我發現這當列爲空時,爲什麼bcp輸出爲null,而列爲空時爲空?
「從數據庫表或視圖複製到一個文件如果指定一個現有的文件,文件在提取數據時,請注意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-space-empty-string
我發現周圍的工作,使用SQL查詢的個案結構 變空字符串爲空。 BCP依次輸出結果爲空的 null! 感謝您的協助。 埃裏克
這是關係到「默認值」部分,BCP:
例如,如果在數據文件中的空場,爲默認值該列被加載。
你必須回想從其他怪異系統導入純文本文件的日子。 BCP將''
轉換爲「未定義」(=缺失數據)並在數據庫中設置NULL(=缺失數據)。對於其他系統來說,來自數據庫的NULL的另一種方法必須是''
。
要得到「真實」的數據從數據庫中使用-k
開關:
下預選賽指定大部分過程中數據文件的空場保留其空值-import操作,而不是繼承表列的默認值(如果有)。
然後你的文件/數據庫中有你的ASCII碼0x0。
http:// stackoverflow。com/questions/12588149/how-to-make-microsoft-bcp-export-empty-string-instead-of-a-nul-char提供了一個潛在的解決方案 – Dan 2013-09-12 13:00:25