INSERT DỮ LIỆU
Có năm cách thêm dữ liệu vào một bảng dữ liệu cũ đang có, trong đó việc sử dụng nguồn dữ liệu từ một bảng dữ liệu khác là rất phổ biến.
Trong trường hợp câu lệnh SQL chỉ rõ các cột chúng ta muốn chèn vào trong cả bảng nguồn và bảng đích, thì lỗi về chênh lệch số lượng cột sẽ không xảy ra.
Tuy nhiên, trong trường hợp chúng ta viết câu lệnh INSERT INTO ngắn gọn có dạng
INSERT INTO TEN_DATABASE.dbo.TEN_BANG_DU_LIEU_DICH
SELECT * FROM TEN_DATABASE.dbo.TEN_BANG_DU_LIEU
LỖI PHÁT SINH
Msg 213, Level 16, State 1, Line 85
Column name or number of supplied values does not match table definition.
Đây là lỗi số lượng cột/trường dữ liệu không khớp nhau giữa 2 bảng.
PHƯƠNG ÁN XỬ LÝ
Để tìm ra các cột không giống nhau giữa 2 bảng, ta có thể dùng các câu lệnh sau:
Đếm số lượng cột đang có trong 2 bảng dữ liệu
select table_name, count(column_name) as so_luong_cot_trong_bang
from information_schema.columns
where table_catalog = ‘HISTORY_DB‘ and table_schema = ‘dbo‘
and table_name in
(‘STG_CRM_TXT_BANDOKH_20191231_NEW’ , ‘STG_CRM_TXT_BANDOKH_20200131_NEW’)
group by table_name
Kiểm tra xem cột ở bảng này không có ở bảng kia và ngược lại
select b1.column_name COT_1, b2.column_name COT_2
from(
select *
from information_schema.columns
where table_catalog = ‘HISTORY_DB‘ and table_schema = ‘dbo’
and table_name = ‘STG_CRM_TXT_BANDOKH_20191231_NEW‘
) b1
full join (
select *
from information_schema.columns
where table_catalog = ‘HISTORY_DB‘ and table_schema = ‘dbo’
and table_name = ‘STG_CRM_TXT_BANDOKH_20200131_NEW‘) b2
on b1.column_name = b2.column_name
where b1.column_name is null or b2.column_name is null
Phần bôi đen là các phần tên Database, tên bảng bạn sẽ thay thế bằng tên thực tế trong Cơ sở dữ liệu của bạn.