Câu trả lời:
Thật không may, điều đó là không thể nếu bạn khăng khăng sử dụng trình hướng dẫn, bạn sẽ cần chỉnh sửa gói bằng Visual Studio.
Có một tùy chọn 'giữ null' khi chỉnh sửa gói trong Visual Studio
Cho tệp .csv này:
StringField,IntField
a,1
b,5
c,
d,6
e,
f,8
g,
h,
i,10
j,
và định nghĩa bảng này
CREATE TABLE [dbo].[NullTest](
[StringField] [varchar](50) NULL,
[IntField] [int] NULL
) ON [PRIMARY]
GO
Khi bạn nhập dữ liệu bằng trình hướng dẫn, các giá trị null được chuyển đổi thành 0
Tuy nhiên, nếu ở cuối trình hướng dẫn, bạn chọn "lưu gói dưới dạng" thay vì "chạy ngay lập tức" như trong màn hình này
Các tập tin có thể được lưu ở đâu đó trên hệ thống tập tin.
Nếu sau đó bạn tạo dự án Dịch vụ Tích hợp mới, bạn có thể thêm gói hiện có như thế này
Nếu bạn duyệt đến tệp bạn vừa lưu và xem nó, bạn sẽ thấy một tác vụ luồng dữ liệu (bạn cũng sẽ thấy một tác vụ SQL thực thi nếu bạn đã chọn để tạo bảng thay vì nối thêm vào một tệp hiện có)
Nhấp đúp vào luồng dữ liệu để chỉnh sửa nó và nhấp đúp vào nguồn dữ liệu để kiểm tra tùy chọn "giữ lại null"
Sau đó nhấp đúp vào đích để xem các thuộc tính, sau đó thay đổi thuộc tính "Giữ null" thành đúng.
Nếu sau đó bạn nhấp vào mũi tên màu lục trên thanh công cụ hoặc chọn gỡ lỗi> bắt đầu gỡ lỗi từ menu để thực thi gói của bạn thì kết quả cuối cùng là đây
Cuối cùng, trình hướng dẫn chỉ là một trình hướng dẫn. Nó tạo ra gói SSIS cho bạn và chọn một số mặc định, tiếc là không phải mặc định bạn muốn.
Nếu bạn muốn giữ null, thực sự không có cách nào khác ngoài việc chỉnh sửa gói với Visual Studio.
Sau đó, một lần nữa, có thể dễ dàng hơn khi chỉ tự tạo gói trong Visual Studio hoặc sử dụng giải pháp T-SQL của @ MaxVernon.
Tôi thấy bạn đang cố gắng sử dụng Trình hướng dẫn để nhập dữ liệu. Bạn có thể tốt hơn hết là tạo bảng theo cách thủ công với các định nghĩa cột mà bạn mong muốn và sử dụng lệnh T-SQL BULK INSERT
để nhập dữ liệu.
USE tempdb;
CREATE TABLE dbo.TestSource
(
SomeNumber INT NULL
);
Tôi đã tạo một tệp mẫu văn bản đơn giản có tên C:\temp\test.txt
chứa các hàng sau:
1
3
4
6
7
9
Câu lệnh này nhập các hàng từ tệp văn bản vào TestSource
bảng:
BULK INSERT dbo.TestSource
FROM 'C:\temp\test.txt'
WITH (
DATAFILETYPE = 'char',
FIELDTERMINATOR = ',',
KEEPNULLS
);
Điều này cho thấy nội dung sau khi nhập xong:
SELECT *
FROM dbo.TestSource;
NẾU bạn có ít nhất SSMS v 17.3 và đang nhập vào một bảng mới được tạo, bạn có thể sử dụng Nhập tệp phẳng vào SQL Wizard cho việc này.
Chạy nó với tệp CSV trong câu trả lời của Tom.
Với bảng kết quả trông giống như