ฉันพยายามแทรกค่าทั้งหมดของตารางหนึ่งลงในอีกตารางหนึ่ง แต่คำสั่งแทรกยอมรับค่า แต่ฉันต้องการให้ยอมรับ select * จาก initial_Table เป็นไปได้หรือไม่
ฉันพยายามแทรกค่าทั้งหมดของตารางหนึ่งลงในอีกตารางหนึ่ง แต่คำสั่งแทรกยอมรับค่า แต่ฉันต้องการให้ยอมรับ select * จาก initial_Table เป็นไปได้หรือไม่
คำตอบ:
คำสั่งแทรกมีไวยากรณ์สำหรับการทำเช่นนั้นจริงๆ ง่ายกว่ามากหากคุณระบุชื่อคอลัมน์แทนที่จะเลือก "*" แต่:
INSERT INTO new_table (Foo, Bar, Fizz, Buzz)
SELECT Foo, Bar, Fizz, Buzz
FROM initial_table
-- optionally WHERE ...
ฉันควรชี้แจงเรื่องนี้ดีกว่าเพราะด้วยเหตุผลบางประการโพสต์นี้ได้รับการโหวตลดลงเล็กน้อย
ไวยากรณ์ INSERT INTO ... SELECT FROM ใช้สำหรับเมื่อมีตารางที่คุณกำลังแทรก ("new_table" ในตัวอย่างด้านบน) อยู่แล้ว ดังที่คนอื่น ๆ กล่าวไว้ไวยากรณ์ SELECT ... INTO มีไว้สำหรับเมื่อคุณต้องการสร้างตารางใหม่โดยเป็นส่วนหนึ่งของคำสั่ง
คุณไม่ได้ระบุว่าจะต้องสร้างตารางใหม่เป็นส่วนหนึ่งของคำสั่งหรือไม่ดังนั้น INSERT INTO ... SELECT FROM ควรจะใช้ได้ถ้าตารางปลายทางของคุณมีอยู่แล้ว
ลองสิ่งนี้:
INSERT INTO newTable SELECT * FROM initial_Table
คุณสามารถแทรกโดยใช้แบบสอบถามย่อยดังนี้:
INSERT INTO new_table (columns....)
SELECT columns....
FROM initial_table where column=value
จากที่นี่:
SELECT *
INTO new_table_name [IN externaldatabase]
FROM old_tablename
คุณสามารถใช้select into
คำสั่ง ดูเพิ่มเติมได้ที่ W3Schools
มีวิธีที่ง่ายกว่าที่คุณไม่ต้องพิมพ์รหัสใด ๆ (เหมาะสำหรับการทดสอบหรืออัปเดตครั้งเดียว):
ขั้นตอนที่ 1
ขั้นตอนที่ 2
ขั้นตอนที่ 3
ขั้นตอนที่ 4
ขั้นตอนที่ 5
หมายเหตุ - 1 : ถ้าคอลัมน์ไม่อยู่ในลำดับที่ถูกต้องเหมือนในตารางเป้าหมายคุณสามารถทำตามขั้นตอนที่ 2 ได้ตลอดเวลาและเลือกคอลัมน์ตามลำดับเดียวกันกับในตารางเป้าหมาย
หมายเหตุ - 2 - หากคุณมีคอลัมน์ Identity ให้ดำเนินการSET IDENTITY_INSERT sometableWithIdentity ON
จากนั้นทำตามขั้นตอนข้างต้นและในตอนท้ายดำเนินการSET IDENTITY_INSERT sometableWithIdentity OFF
หากคุณกำลังถ่ายโอนข้อมูลล็อตอย่างถาวรเช่นไม่เติมข้อมูลในตารางชั่วคราวฉันขอแนะนำให้ใช้ข้อมูลนำเข้า / ส่งออกของเซิร์ฟเวอร์ SQLสำหรับการแมปแบบตารางต่อตาราง
เครื่องมือนำเข้า / ส่งออกมักจะดีกว่า SQL แบบตรงเมื่อคุณมีการแปลงประเภทและการตัดทอนค่าที่เป็นไปได้ในการแมปของคุณ โดยทั่วไปยิ่งการทำแผนที่ของคุณซับซ้อนมากเท่าไหร่คุณก็จะยิ่งมีประสิทธิผลมากขึ้นโดยใช้เครื่องมือ ETL เช่น Integration Services (SSIS) แทนที่จะใช้ SQL โดยตรง
เครื่องมือนำเข้า / ส่งออกเป็นวิซาร์ด SSIS และคุณสามารถบันทึกงานของคุณเป็นแพ็คเกจ dtsx
ฉันคิดว่าคำพูดนี้อาจทำในสิ่งที่คุณต้องการ
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")