Tôi đang sử dụng openrowset để nhập tệp csv vào SQL Server. Một trong các cột trong tệp csv chứa các số trong ký hiệu khoa học (1.08E + 05) và cột trong bảng đang được chènChuyển đổi ký hiệu khoa học thành float khi sử dụng OpenRowSet để nhập tệp .CSV
Theo mặc định, nhập giá trị là 1 và bỏ qua .08E + 05.
Tôi đã thử sử dụng hàm cast() và chuyển đổi() để chuyển đổi giá trị trực tiếp khi truy vấn được thực thi cũng như thiết lập kiểu dữ liệu trong bảng dưới dạng chuỗi ký tự và nhập nó như vậy. Tất cả các phương thức này có cùng một hành vi trong đó .08E + 05 bị bỏ qua.
Có cách nào để nhập giá trị là 108000 thay vì 1 không có .08E + 05 mà không phải tự thay đổi tệp csv không?
Thiết lập datatype như một varchar và đọc trong file csv dường như có tác dụng tương tự với đoạn mã sau:
CREATE TABLE #dataTemp (StartDate datetime, Value varchar(12))
SET @insertDataQuery = 'SELECT Date, CSVValue from OpenRowset(''MSDASQL'', ''Driver={Microsoft Text Driver (*.txt; *.csv)}; DefaultDir='
SET @insertDataQuery = @insertDataQuery + 'C:\Data\;'',''SELECT * FROM '+ '11091800.csv' + ''')'
INSERT INTO #dataTemp EXEC(@insertDataQuery)
SELECT * FROM #dataTemp
Không phải tất cả các giá trị trong file CSV có ký hiệu khoa học và giá trị không có nó, ví dụ 81000 đi qua mà không có vấn đề.
Trên thực tế trong trường hợp của bạn bây giờ mà tôi đang đọc lại các câu hỏi mà bạn có thể có lẽ chỉ sử dụng 'CHỌN CONVERT (INT , CONVERT (FLOAT, '1.08E + 05 ')); '- lần cuối tôi làm việc về ký hiệu khoa học Tôi đã giao dịch với các quầy hiệu suất từ LogMan, và tôi chắc chắn cần số thập phân ... –
Bất kỳ giải pháp nào ở trên đều hoạt động nếu tôi cung cấp giá trị một cách rõ ràng. Trong tệp CSV, tôi có một tên cột cho giá trị và nếu tôi sử dụng tên đó, ví dụ CONVERT (INT, CONVERT (FLOAT, COLUMN_NAME_IN_CSV)), tôi vẫn nhận được hành vi mà nó chỉ đọc chữ số đầu tiên. Suy nghĩ? – amarcy
Suy nghĩ của tôi vẫn còn để chèn số lượng lớn vào một bảng varchars đầu tiên. Có thể có một cái gì đó khác đang xảy ra khi chèn của bạn ... chọn từ truy vấn openrowset đang cố gắng để phù hợp với loại bảng để siêu dữ liệu từ truy vấn. Nếu bạn đang chèn vào varchar đầu tiên, nó sẽ không quan tâm ... –