Dùng VBA đưa dữ liệu vào SQL Server

Chia sẻ bởi:hands
★★★★★
Quảng cáo

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ự
Khóa học SprinGO phù hợp

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
★★★★★ 5 ★ 1 👤 1 ▥ 0
Quảng cáo

Bạn nên đọc

One Response

  1. hands says:

    Hi Quân
    Với file định Bulk Insert vào SQL Database như đính kèm, bạn soạn cho mình 1 Proc để từ SSMS có thể tự động import dữ liệu vào database với. Cảm ơn bạn
    Diễn đàn ko cho phép update với đuôi .csv nên mình phải nén lại thành file .rar

    2624

    Bạn tạo bảng tạm có các cột như bảng gốc, có mỗi cột đầu, thay vì datetime thì bạn khai báo là varchar, sau đó bulk insert vào bảng tạm, cuối cùng là insert data từ bảng tạm sang bảng gốc (dunng convert để đưa về đúng kiểu dữ liệu bảng gố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

    USE [testDB]
    GO
    
    CREATE PROCEDURE [dbo].[ImportCSVFile] (@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),
            MAWB_NO Varchar(15),
            HAWB Varchar(15),
            MO_TA_DICH_VU Varchar(50),
            PHI_DICH_VU Money,
            VAT Float,
            THANH_TIEN Money,
            GIA_TRI_TREN_HOA_DON money,
            DON_VI_XUAT Varchar(15),
            NHAN_VIEN_XUAT_HOA_DON Varchar(30)
        )
    
    DECLARE @SQL NVARCHAR(MAX) = ''
        SET @SQL = N'
        BULK INSERT #TempCSV
          FROM ''' + @filePath + '''
          WITH (
            FIELDTERMINATOR = '','',
            ROWTERMINATOR = ''n'',
            FIRSTROW=2
          )'
    
    EXEC sp_executesql @SQL
    
    SELECT * FROM #TempCSV
    END

    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)

    USE [TestDB]
    GO
    
    EXEC dbo.ImportCSVFile 'C:TempExportCashInvoice.csv'

    – 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 …

    ——————————————–

Leave a Reply

Your email address will not be published. Required fields are marked *

Quảng cáo

Cũ vẫn chất

Xem thêm