ฉันมีฐานข้อมูลชื่อ foo และฐานข้อมูลชื่อ bar ฉันมีตารางใน foo ชื่อ tblFoobar ที่ฉันต้องการย้าย (data และทั้งหมด) ไปยังแถบฐานข้อมูลจากฐานข้อมูล foo คำสั่ง SQL ที่จะทำคืออะไร?
ฉันมีฐานข้อมูลชื่อ foo และฐานข้อมูลชื่อ bar ฉันมีตารางใน foo ชื่อ tblFoobar ที่ฉันต้องการย้าย (data และทั้งหมด) ไปยังแถบฐานข้อมูลจากฐานข้อมูล foo คำสั่ง SQL ที่จะทำคืออะไร?
คำตอบ:
บน SQL Server และบนเซิร์ฟเวอร์ฐานข้อมูลเดียวกัน ใช้การตั้งชื่อสามส่วน
INSERT INTO bar..tblFoobar( *fieldlist* )
SELECT *fieldlist* FROM foo..tblFoobar
นี่แค่ย้ายข้อมูล หากคุณต้องการย้ายคำจำกัดความของตาราง (และคุณลักษณะอื่น ๆ เช่นการอนุญาตและดัชนี) คุณจะต้องทำอย่างอื่น
งาน "นำเข้าข้อมูล" ของ SQL Server Management Studio (คลิกขวาที่ชื่อฐานข้อมูลจากนั้นงาน) จะทำสิ่งนี้ให้คุณมากที่สุด เรียกใช้จากฐานข้อมูลที่คุณต้องการคัดลอกข้อมูล
หากตารางไม่มีอยู่มันจะสร้างตารางให้คุณ แต่คุณอาจต้องสร้างดัชนีและสิ่งนั้นใหม่ หากตารางมีอยู่จริงจะมีการผนวกข้อมูลใหม่ตามค่าเริ่มต้น แต่คุณสามารถปรับ (แก้ไขการแมป) เพื่อที่จะลบข้อมูลที่มีอยู่ทั้งหมด
ฉันใช้มันตลอดเวลาและใช้งานได้ดี
WHERE
เงื่อนไขโดยใช้งาน Import Data? ฉันไม่สามารถหาวิธีที่จะทำ
สิ่งนี้น่าจะใช้ได้:
SELECT *
INTO DestinationDB..MyDestinationTable
FROM SourceDB..MySourceTable
มันจะไม่คัดลอกค่าคงที่ค่าเริ่มต้นหรือดัชนี ตารางที่สร้างขึ้นจะไม่มีดัชนีแบบคลัสเตอร์
หรือคุณสามารถ:
INSERT INTO DestinationDB..MyDestinationTable
SELECT * FROM SourceDB..MySourceTable
หากตารางปลายทางของคุณมีอยู่และว่างเปล่า
INSERT INTO...
) ทำงานให้ฉันใน Oracle
หากเป็นเพียงตารางเดียวสิ่งที่คุณต้องทำคือ
สิ่งหนึ่งที่คุณต้องพิจารณาคือการอัปเดตอื่น ๆ เช่นการย้ายวัตถุอื่น ๆ ในอนาคต โปรดทราบว่าตารางต้นทางและตารางปลายทางของคุณไม่มีชื่อเดียวกัน ซึ่งหมายความว่าคุณจะต้องทำการเปลี่ยนแปลงหากคุณขึ้นอยู่กับวัตถุเช่นมุมมองขั้นตอนการจัดเก็บและอื่น ๆ
เล็กน้อยหนึ่งหรือหลายวัตถุที่คุณสามารถไปด้วยตนเองโดยไม่มีปัญหาใด ๆ อย่างไรก็ตามเมื่อมีมากกว่าเพียงไม่กี่ปรับปรุงเครื่องมือเปรียบเทียบของบุคคลที่สามมามีประโยชน์มาก ตอนนี้ฉันใช้ApexSQL Diffสำหรับการโยกย้ายสคีมา แต่คุณไม่สามารถผิดพลาดกับเครื่องมืออื่น ๆ
สคริปต์ the create table
in studio studio เรียกใช้สคริปต์นั้นในแถบเพื่อสร้างตาราง (คลิกขวาที่ตารางใน Object explorer, ตารางสคริปต์เป็น, สร้างเป็น ... )
INSERT bar.[schema].table SELECT * FROM foo.[schema].table
SET IDENTITY_INSERT TblName ON
ในกรณีนั้นด้วย
คุณยังสามารถใช้วิซาร์ดสร้างสคริปต์เซิร์ฟเวอร์ SQLเพื่อช่วยแนะนำการสร้างสคริปต์ SQL ที่สามารถทำสิ่งต่อไปนี้:
เวิร์กโฟลว์ตัวอย่างที่ดีสำหรับSQL Server 2008มีภาพหน้าจอที่แสดงที่นี่
คุณอาจไปทางนี้: (ตัวอย่างทั่วไป)
insert into QualityAssuranceDB.dbo.Customers (columnA, ColumnB)
Select columnA, columnB from DeveloperDB.dbo.Customers
นอกจากนี้หากคุณต้องการสร้างชื่อคอลัมน์เช่นกันเพื่อใส่ส่วนคำสั่งแทรกให้ใช้:
select (name + ',') as TableColumns from sys.columns
where object_id = object_id('YourTableName')
คัดลอกผลลัพธ์และวางลงในหน้าต่างแบบสอบถามเพื่อแสดงชื่อคอลัมน์ตารางของคุณและสิ่งนี้จะแยกคอลัมน์ข้อมูลประจำตัวด้วย:
select (name + ',') as TableColumns from sys.columns
where object_id = object_id('YourTableName') and is_identity = 0
โปรดจำไว้ว่าสคริปต์เพื่อคัดลอกแถวจะทำงานหากฐานข้อมูลอยู่ในตำแหน่งเดียวกัน
คุณสามารถลองสิ่งนี้
select * into <Destination_table> from <Servername>.<DatabaseName>.dbo.<sourceTable>
ชื่อเซิร์ฟเวอร์เป็นทางเลือกถ้าฐานข้อมูลทั้งสองอยู่ในเซิร์ฟเวอร์เดียวกัน
หากมีตารางที่มีอยู่และเราต้องการคัดลอกข้อมูลเท่านั้นเราสามารถลองใช้แบบสอบถามนี้
แทรกลงใน Destination_Existing_Tbl เลือก col1, col2 จาก Source_Tbl
คัดลอกข้อมูล
INSERT INTO Alfestonline..url_details(url,[status],recycle)
SELECT url,status,recycle FROM AlfestonlineOld..url_details