Câu trả lời:
Câu lệnh chèn thực sự có một cú pháp để làm việc đó. Sẽ dễ dàng hơn rất nhiều nếu bạn chỉ định tên cột thay vì chọn "*":
INSERT INTO new_table (Foo, Bar, Fizz, Buzz)
SELECT Foo, Bar, Fizz, Buzz
FROM initial_table
-- optionally WHERE ...
Tôi nên làm rõ điều này hơn vì một số lý do bài đăng này đang nhận được một vài lượt bình chọn.
Cú pháp INSERT INTO ... CHỌN TỪ dành cho khi bảng bạn đang chèn vào ("new_table" trong ví dụ của tôi ở trên) đã tồn tại. Như những người khác đã nói, cú pháp CHỌN ... VÀO là khi bạn muốn tạo bảng mới như một phần của lệnh.
Bạn đã không xác định liệu bảng mới có cần được tạo như một phần của lệnh hay không, do đó, XÓA VÀO ... CHỌN TỪ sẽ ổn nếu bảng đích của bạn đã tồn tại.
Thử cái này:
INSERT INTO newTable SELECT * FROM initial_Table
Bạn có thể chèn bằng truy vấn con như sau:
INSERT INTO new_table (columns....)
SELECT columns....
FROM initial_table where column=value
Từ đây:
SELECT *
INTO new_table_name [IN externaldatabase]
FROM old_tablename
Bạn có thể sử dụng một select into
tuyên bố. Xem thêm tại W3Schools .
Có một cách dễ dàng hơn khi bạn không phải nhập bất kỳ mã nào (Lý tưởng để thử nghiệm hoặc cập nhật một lần):
Bước 1
Bước 2
Bước 3
Bước 4
Bước 5
Lưu ý - 1 : Nếu các cột không theo đúng thứ tự như trong bảng Target, bạn luôn có thể làm theo Bước 2 và Chọn các Cột theo thứ tự như trong bảng Target
Lưu ý - 2 - Nếu bạn có các cột Danh tính thì hãy thực hiện SET IDENTITY_INSERT sometableWithIdentity ON
và sau đó làm theo các bước trên và cuối cùng thực hiệnSET IDENTITY_INSERT sometableWithIdentity OFF
Nếu bạn đang truyền nhiều dữ liệu vĩnh viễn, tức là không điền vào bảng tạm thời, tôi khuyên bạn nên sử dụng SQL Server Nhập / Xuất dữ liệu cho ánh xạ bảng-bảng.
Công cụ Nhập / Xuất thường tốt hơn SQL thẳng khi bạn có chuyển đổi loại và cắt giảm giá trị có thể có trong ánh xạ của bạn. Nói chung, ánh xạ của bạn càng phức tạp, bạn càng sử dụng công cụ ETL như Dịch vụ Tích hợp (SSIS) thay vì SQL trực tiếp.
Công cụ Nhập / Xuất thực sự là một trình hướng dẫn SSIS và bạn có thể lưu công việc của mình dưới dạng gói dtsx.
Tôi nghĩ rằng tuyên bố này có thể làm những gì bạn muốn.
INSERT INTO newTableName (SELECT column1, column2, column3 FROM oldTable);
Dim ofd As New OpenFileDialog
ofd.Filter = "*.mdb|*.MDB"
ofd.FilterIndex = (2)
ofd.FileName = "bd1.mdb"
ofd.Title = "SELECCIONE LA BASE DE DATOS ORIGEN (bd1.mdb)"
ofd.ShowDialog()
Dim conexion1 = "Driver={Microsoft Access Driver (*.mdb)};DBQ=" + ofd.FileName
Dim conn As New OdbcConnection()
conn.ConnectionString = conexion1
conn.Open()
'EN ESTE CODIGO SOLO SE AGREGAN LOS DATOS'
Dim ofd2 As New OpenFileDialog
ofd2.Filter = "*.mdb|*.MDB"
ofd2.FilterIndex = (2)
ofd2.FileName = "bd1.mdb"
ofd2.Title = "SELECCIONE LA BASE DE DATOS DESTINO (bd1.mdb)"
ofd2.ShowDialog()
Dim conexion2 = "Driver={Microsoft Access Driver (*.mdb)};DBQ=" + ofd2.FileName
Dim conn2 As New OdbcConnection()
conn2.ConnectionString = conexion2
Dim cmd2 As New OdbcCommand
Dim CADENA2 As String
CADENA2 = "INSERT INTO EXISTENCIA IN '" + ofd2.FileName + "' SELECT * FROM EXISTENCIA IN '" + ofd.FileName + "'"
cmd2.CommandText = CADENA2
cmd2.Connection = conn2
conn2.Open()
Dim dA2 As New OdbcDataAdapter
dA2.SelectCommand = cmd2
Dim midataset2 As New DataSet
dA2.Fill(midataset2, "EXISTENCIA")