Dùng VBA đưa dữ liệu vào SQL Server
Chào các anh chị
Em có tìm được 1 đoạn code VBA để đẩy dữ liệu từ Excel vào database của SQL Server. Hiện em đang gặp vấn đề khi đẩy giá trị thời gian (Cột A trong file đính kèm) vào SQL Server.
Dù đã Google nhưng em vẫn chưa biết dùng hàm chuyển đổi thế nào để vào có thể vào SQL suôn sẻ.
Nhờ các anh chị giúp đỡ. Em xin cảm ơn
Cách an toàn nhất để insert date vào SQL Server là dùng Format 'yyyymmdd'
Với file đính kèm, bác sửa chỗ cần thiết giúp em với.
Dữ liệu trong file đính kèm là được copy từ file .csv nên để việc đẩy vào SQL đc suôn sẻ, chắc phải sửa trong code VBA. Trong SQL Database, em vẫn cần cả ngày lẫn giờ.
Giả sử ô trong excel là 19/01/2020. Bạn sử dụng format được bỏ trong cặp dấu ngoặc đơn '" & format(ô,"yyyy-mm-dd") & "' . Mình thêm một biến trong sql thường bỏ trong dấu ngoặc đơn.
Em đã thử như format(ô,"yyyy-mm-dd") thì đã nhập được. Nhưng em vẫn muốn lấy cả giờ:phút như trong cột A của file Excel bên trên thì làm thế nào ? Nhờ bác chỉ thêm
Hiện tại mình ở quê, dùng điện thoại nên không thể xem file bạn được, bạn có thể chụp hình cho mình xem nội dung trong file của bạn được không, khai báo biến ngày giờ trong sql của bạn là kiểu gì nhỉ?
Bạn chỉ cần thêm tham số cho hàm Format() là được rồi.
Format(ô,"yyyymmdd hh:nn:ss")
Hiện tại mình ở quê, dùng điện thoại nên không thể xem file bạn được, bạn có thể chụp hình cho mình xem nội dung trong file của bạn được không, khai báo biến ngày giờ trong sql của bạn là kiểu gì nhỉ?
Đúng là em khai báo sai biến. Em đổi lại là Datetime thì được rồi. Cảm ơn anh đã hỗ trợ
Bạn chỉ cần thêm tham số cho hàm Format() là được rồi.
Format(ô,"yyyymmdd hh:nn:ss")Cảm ơn anh. Em đã làm như vậy và đã được rồi.
Em đang tìm hiểu SQL để lưu dữ liệu vào đó thay vì Excel nên cái gì cũng mới. Rất mong được bác hướng dẫn.Em có thấy trên mạng có 1 đoạn code này chạy trong SSMS, nhưng khi chạy nó báo lỗi về trường ngày tháng. Format ngày tháng trong file .csv có định dạng dd/mm/yyyy h:mm:ss. Vậy em phải convert như thế nào để dữ liệu được nhập đúng vào Database ạ. (Bản chất em muốn tạo 1 thủ tục và gán vào 1 job để định kỳ tự động nạp dữ liệu .csv vào database SQL)
Bulk Insert
from 'D:HoctapTestdata.csv'
with
(
Rowterminator = 'n',
Fieldterminator = ','
)Em cảm ơn các bác
Dùng bulk insert vào trực tiếp thì file và bảng phải cùng kiểu dữ liệu, trong trường hợp của bạn bị lỗi thì bạn phải bulk insert vào bảng tạm trước rồi từ bảng tạm này dùng các hàm convert/format… để đưa chuẩn dữ liệu vào bảng gốc
www.giaiphapexcel.com/diendan/threads/d%C3%B9ng-vba-%C4%91%C6%B0a-d%E1%BB%AF-li%E1%BB%87u-v%C3%A0o-sql-server.147414/
Khóa học Power PI – Ứng dung trong Nhân sự
TỔNG QUAN KHÓA HỌC: POWER BI CHO NGÀNH NHÂN SỰ Khóa học Power BI cho Nhân sự được thiết kế dành riêng cho các...
Xem khóa học
Tôi có chỉnh sửa lại cái stored procedure (SP) mà tôi dùng cho "Bulk Insert" nhưng cái Sp này là tôi dùng table tạm của hệ thống SQL Server (#TempTable) chứ không phải Table tạm bạn tạo sẳn trong Database của bạn.
Lưu ý là: muốn BULK INSERT thì User đó phải có quyền Admin của Database nên cẩn trọng trong việc phân quyền thực hiện tính năng này.
Một lưu ý khác là BULK INSERT không dùng được tham số (parameter) nên bạn không thể khai báo tên biến đường dẫn file để đưa vào SP được mà phải dùng SQL động.
Ví dụ: cách này sẽ báo lỗi chỗ tham số @filePath
——————————————
USE
GO
CREATE PROCEDURE . (@filePath VARCHAR(MAX))
AS
BEGIN
CREATE TABLE #TempCSV
(
NGAY_XUAT_HOA_DON Varchar(20),
CACH_THANH_TOAN Varchar(10) NULL,
SO_HOA_DON Varchar(15),
…
)
BULK INSERT #TempCSV
From @filePath
With (
FIELDTERMINATOR = ',',
ROWTERMINATOR = 'n'
FIRSTROW = 2
)
…
END
——————————————————
Cách đúng: Tạo SP dùng SQL động
Sau khi tạo stored proc. "ImportCSVFile" xong, bạn chạy câu lệnh này để kiểm tra.
(Tự sửa đường dẫn tới file CSV trên máy bạn)
– Cái SP này sẽ Bulk Insert vào table tạm (có dấu thăng "#") của hệ thống (nằm trong: Databases -> System Databases -> tempdb -> Temporary Tables).
– Table tạm này sẽ tự động bị xoá khi phiên kết nối hiện tại (phiên chạy Sp) đóng. Phiên kết nối khác sẽ không nhìn thấy table tạm này.
– Nếu file CSV bạn muốn Insert chỉ có một số Field của một table tổng thôi thì bạn có thể dùng View để chỉ Bulk Insert.
Ví dụ:
——————————————–
Create View HoaDonView
As
Select Ngay_Xuat_Hoa_Don,
Cach_Thanh_Toan,
….
From tblHoaDonTong
——————————————–
==>
——————————————–
Bulk Insert HoaDonView
From …
With …