Sql-Server
使用嚮導導入 txt 時如何將空白導入為空值而不是零
我正在使用導入嚮導載入一個文本文件,並且需要整數欄位中的空白為空,但只插入零。
如何正確導入?
不幸的是,如果您堅持使用嚮導,這是不可能的,您需要使用 Visual Studio 編輯包。
在 Visual Studio 中編輯包時有一個選項“保持空值”
鑑於此 .csv 文件:
StringField,IntField a,1 b,5 c, d,6 e, f,8 g, h, i,10 j,
和這個表定義
CREATE TABLE [dbo].[NullTest]( [StringField] [varchar](50) NULL, [IntField] [int] NULL ) ON [PRIMARY] GO
當您使用嚮導導入數據時,空值將轉換為 0
但是,如果在嚮導結束時選擇“將包另存為”而不是在此螢幕中選擇“立即執行”
該文件可以保存在文件系統的某個位置。
如果您隨後創建一個新的集成服務項目,您可以像這樣添加一個現有的包
如果您瀏覽到剛剛保存的文件並查看它,您將看到一個數據流任務(如果您選擇創建表而不是附加到現有表,您還將看到一個執行 SQL 任務)
點兩下數據流進行編輯,點兩下數據源選中“保留空值”選項
然後點兩下目標查看屬性,然後將“保持空值”屬性更改為 true。
如果您然後點擊工具欄中的綠色箭頭或從菜單中選擇調試 > 開始調試以執行您的包,最終結果是這樣
說到底,巫師只是一個巫師。它為您生成一個 SSIS 包並選擇一些預設值,不幸的是不是您想要的預設值。
如果您想保留空值,除了使用 Visual Studio 編輯包之外沒有其他方法。
再說一次,在 Visual Studio 中自己創建包或使用@MaxVernon 的 T-SQL 解決方案可能更容易。
我看到您正在嘗試使用嚮導導入數據。您最好手動創建具有所需列定義的表,並使用 T-SQL
BULK INSERT
命令導入數據。USE tempdb; CREATE TABLE dbo.TestSource ( SomeNumber INT NULL );
我創建了一個名為的純文字範例文件
C:\temp\test.txt
,其中包含以下行:1 3 4 6 7 9
此語句將文本文件中的行導入
TestSource
表中:BULK INSERT dbo.TestSource FROM 'C:\temp\test.txt' WITH ( DATAFILETYPE = 'char', FIELDTERMINATOR = ',', KEEPNULLS );
這顯示了導入完成後的內容:
SELECT * FROM dbo.TestSource;