Cách nhập khoảng trống dưới dạng null thay vì số không trong khi nhập txt bằng thuật sĩ


8

Tôi đang sử dụng Trình hướng dẫn Nhập để tải tệp văn bản và cần khoảng trống trong các trường số nguyên thành null, nhưng chỉ các số không được chèn.

Làm thế nào để nhập đúng?

Câu trả lời:


8

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

nhập mô tả hình ảnh ở đâ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

nhập mô tả hình ảnh ở đâ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 mô tả hình ảnh ở đây

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"

nhập mô tả hình ảnh ở đây

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.

nhập mô tả hình ảnh ở đây

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

nhập mô tả hình ảnh ở đâ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.


6

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.txtchứ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 TestSourcebả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;

nhập mô tả hình ảnh ở đây


6

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.

nhập mô tả hình ảnh ở đây

Với bảng kết quả trông giống như

nhập mô tả hình ảnh ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.