ฉันเป็นคนหนึ่งที่อึดอัดกับ SSIS อย่างสมบูรณ์
เมื่อตารางต้นฉบับไม่มีคอลัมน์ข้อมูลระบุตัวตน
- สร้างฐานข้อมูลเปล่าที่เซิร์ฟเวอร์เป้าหมาย
- สร้างเซิร์ฟเวอร์ที่เชื่อมโยงกับเซิร์ฟเวอร์ต้นทางบนเซิร์ฟเวอร์เป้าหมาย
- เรียกใช้สคริปต์ด้านล่างนี้ในฐานข้อมูลต้นทางเพื่อสร้างคำสั่ง select * เป็น ...
- เรียกใช้สคริปต์ที่สร้างจากฐานข้อมูลเป้าหมาย
- คีย์หลักของสคริปต์ดัชนีทริกเกอร์ฟังก์ชันและโพรซีเดอร์จากฐานข้อมูลต้นทาง
- สร้างวัตถุเหล่านี้โดยสคริปต์ที่สร้างขึ้น
ตอนนี้ T-SQL เพื่อสร้างคำสั่ง Select * เป็น ...
SET NOCOUNT ON
declare @name sysname
declare @sql varchar(255)
declare db_cursor cursor for
select name from sys.tables order by 1
open db_cursor
fetch next from db_cursor into @name
while @@FETCH_STATUS = 0
begin
Set @sql = 'select * into [' + @name + '] from [linked_server].[source_db].[dbo].[' + @name + '];'
print @sql
fetch next from db_cursor into @name
end
close db_cursor
deallocate db_cursor
สิ่งนี้สร้างบรรทัดสำหรับแต่ละตารางเพื่อคัดลอกเช่น
select * into [Table1] from [linked_server].[source_db].[dbo].[Table1];
ในกรณีที่ตารางมีคอลัมน์ข้อมูลเฉพาะตัวฉันสคริปต์ตารางรวมถึงคุณสมบัติข้อมูลประจำตัวและคีย์หลัก
ฉันไม่ได้ใช้การแทรกลงใน ... เลือก ... โดยใช้เซิร์ฟเวอร์ที่เชื่อมโยงในกรณีนี้เนื่องจากนี่ไม่ใช่เทคนิคแบบกลุ่ม ฉันกำลังทำงานกับสคริปต์ PowerShell บางอย่างที่คล้ายกับ [คำถามนี้1ข้อแต่ฉันยังคงทำงานเกี่ยวกับการจัดการข้อผิดพลาด ตารางขนาดใหญ่จริง ๆ อาจทำให้เกิดข้อผิดพลาดหน่วยความจำไม่ครบเนื่องจากตารางทั้งหมดถูกโหลดเข้าสู่หน่วยความจำก่อนที่จะส่งผ่าน SQLBulkCopy ไปยังฐานข้อมูล
การสันทนาการของดัชนีเป็นต้นนั้นคล้ายกับกรณีข้างต้น เวลานี้ฉันสามารถข้ามการเล่นเกมของคีย์หลัก