การส่งออกข้อมูลใน SQL Server เป็น INSERT INTO


413

ฉันใช้ SQL Server 2008 Management Studio และมีตารางที่ฉันต้องการย้ายไปยังเซิร์ฟเวอร์ db อื่น

มีตัวเลือกในการส่งออกข้อมูลเป็นส่วนแทรกลงในสคริปต์ SQL หรือไม่?

คำตอบ:


682

ใน SSMS ใน Object Explorer คลิกขวาที่ฐานข้อมูลคลิกขวาแล้วเลือก "Tasks" แล้วเลือก "สร้างสคริปต์"

สิ่งนี้จะช่วยให้คุณสร้างสคริปต์สำหรับตารางเดียวหรือทั้งหมดและหนึ่งในตัวเลือกคือ "ข้อมูลสคริปต์" หากคุณตั้งค่าเป็น TRUE ตัวช่วยสร้างจะสร้างสคริปต์ด้วยคำสั่ง INSERT INTO () สำหรับข้อมูลของคุณ

หากใช้ 2008 R2 หรือ 2012 เรียกว่าอย่างอื่นดูภาพหน้าจอด้านล่างนี้

ข้อความแสดงแทน

2008 R2 หรือใหม่กว่าเช่น 2012

เลือก "ประเภทของข้อมูลต่อสคริปต์" ซึ่งอาจเป็น "ข้อมูลเท่านั้น", "สคีมาและข้อมูล" หรือ "สคีมาเท่านั้น" - ค่าเริ่มต้น)

ป้อนคำอธิบายรูปภาพที่นี่

จากนั้นมีแพ็คเกจ" SSMS Addin " บน Codeplex (รวมถึงแหล่งที่มา) ซึ่งรับประกันการใช้งานที่เหมือนกันและอีกไม่กี่อย่าง (เช่นการค้นหาอย่างรวดเร็ว ฯลฯ )

ข้อความแสดงแทน


ฉันเพิ่งติดตั้ง Addin จาก Codeplex ดี ขอบคุณสำหรับข้อมูล.
Rob Garrison

1
SMSS Add In ใช้งานได้กับฉันในปี 2008 Data Scripter Add In ไม่ทำงาน
Phil Hale

5
ในปี 2008 R2 จะมีตัวเลือก "ประเภทของข้อมูลไปยังสคริปต์" บนหน้าจอ "ตั้งค่าตัวเลือกสคริปต์" กดปุ่ม "ขั้นสูง" ที่นั่น
raymi

3
Addins เหล่านี้ทำงานใน 2008 R2 หรือไม่ SSMS Addin กำลังส่งข้อยกเว้นเมื่อโหลด
jocull

2
ลองดูที่คำตอบ @ruffin ด้านล่างสำหรับภาพหน้าจอเพิ่มเติม
Keith Sirmons

117

เพื่อความชัดเจนมากเกินไปหลังจากทำตามคำแนะนำของ marc_s ที่นี่ ...

ใน SSMS ใน Object Explorer ให้คลิกขวาที่ฐานข้อมูลคลิกขวาแล้วเลือก "Tasks" จากนั้น "สร้างสคริปต์"

... จากนั้นฉันจะเห็นหน้าจอวิซาร์ดที่มี " บทนำเลือกวัตถุตั้งค่าตัวเลือกการเขียนบทสรุปและบันทึกหรือเผยแพร่สคริปต์ " ด้วยปุ่มก่อนหน้าถัดไปเสร็จสิ้นยกเลิกที่ด้านล่าง

ในขั้นตอนการตั้งค่าตัวเลือกการสคริปต์คุณต้องคลิก "ขั้นสูง"เพื่อรับหน้าพร้อมตัวเลือก จากนั้นดังที่Ghlouwได้กล่าวถึงตอนนี้คุณเลือก "ประเภทของข้อมูลไปยังสคริปต์" และกำไร

ปุ่มขั้นสูงเน้นสีแดง! 1 !!


13
ขอบคุณปุ่มนี้ไม่มีตำแหน่งที่เข้าใจง่ายมาก ฉันคิดว่ามันเป็นของ "บันทึกไปยังไฟล์"
Karel Kral

48

ถ้าคุณใช้ SQLServer 2008R2 คุณจะต้องตั้งค่าประเภทข้อมูลเป็นสคริปต์

ป้อนคำอธิบายรูปภาพที่นี่


2
ยังใช้กับ 2555
OldCurmudgeon

1
มีผลบังคับใช้กับปี 2014 ด้วย
NucS

2
หากคุณสับสนเช่นฉันตัวเลือก "ประเภทของข้อมูลไปยังสคริปต์" จะปรากฏเฉพาะในตัวเลือก "ขั้นสูง" ของตัวช่วยสร้าง "สร้างสคริปต์ ... " - คุณไม่พบในกล่องโต้ตอบตัวเลือกหลัก!
Etherman

36

หากคุณใช้ SQL Server 2008 R2 ตัวเลือกในตัวในการทำเช่นนี้ใน SSMS เนื่องจาก marc_s อธิบายไว้ข้างต้นเปลี่ยนไปเล็กน้อย แทนที่จะเลือกScript data = trueตามที่แสดงในแผนภาพตอนนี้มีตัวเลือกใหม่ที่เรียกว่า"Types of data to script"อยู่เหนือการจัดกลุ่ม "ตาราง / มุมมองตัวเลือก" ที่นี่คุณสามารถเลือกข้อมูลสคริปต์เท่านั้นสคีมาและข้อมูลหรือสคีมาเท่านั้น ทำงานเหมือนจับใจ



6

สำหรับผู้ที่กำลังมองหาเวอร์ชั่นบรรทัดคำสั่ง Microsoft เปิดmssql-scripterให้ทำดังนี้:

$ pip install mssql-scripter

# Generate DDL scripts for all database objects and DML scripts (INSERT statements)
# for all tables in the Adventureworks database and save the script files in
# the current directory
$ mssql-scripter -S localhost -d AdventureWorks -U sa --schema-and-data \
                 -f './' --file-per-object

ดูเหมือนว่า mssql-scripter เป็นโครงการที่ตายแล้วในขณะนี้
อเล็กซ์ซูซูกิ

จริงไม่มีการพัฒนาเกิดขึ้นในปีที่ผ่านมา แต่ก็ใช้ได้ดีสำหรับฉัน
Nickolay

3

เพียงอัปเดตสกรีนช็อตเพื่อช่วยเหลือผู้อื่นในขณะที่ฉันใช้ v18 รุ่นใหม่ประมาณปี 2019

คลิกขวาที่ฐานข้อมูล: ภารกิจ> สร้างสคริปต์

ที่นี่คุณสามารถเลือกตารางบางอย่างหรือไปกับค่าเริ่มต้นของทั้งหมด

ที่นี่คุณสามารถเลือกตารางบางอย่างหรือไปกับค่าเริ่มต้นของทั้งหมด สำหรับความต้องการของฉันฉันกำลังแสดงเพียงหนึ่งตาราง

ถัดไปมี "ตัวเลือกการเขียนสคริปต์" ที่คุณสามารถเลือกไฟล์ที่ส่งออกและอื่น ๆ เช่นเดียวกับในหลาย ๆ คำตอบข้างต้น (อีกครั้งฉันแค่ปัดคำตอบเก่าสำหรับใหม่ v18.4 Studio จัดการเซิร์ฟเวอร์ SQL) สิ่งที่เราต้องการจริงๆ อยู่ใต้ปุ่ม "ขั้นสูง" เพื่อจุดประสงค์ของตัวเองฉันต้องการเพียงแค่ข้อมูล

ตัวเลือกเอาต์พุตทั่วไปรวมถึงเอาต์พุตไปยังไฟล์ ตัวเลือกขั้นสูงรวมถึงข้อมูล!

ในที่สุดก็มีบทสรุปทบทวนก่อนที่จะดำเนินการ หลังจากดำเนินการรายงานสถานะของการดำเนินการจะปรากฏขึ้น สรุปบทวิจารณ์


2

คุณสามารถตรวจสอบ "Data Scripter Add-In" สำหรับ SQL Server Management Studio 2008 ได้จาก:

http://www.mssql-vehicle-data.com/SSMS


รายการคุณสมบัติของพวกเขา:

  • มันได้รับการพัฒนาใน SSMS 2008 และไม่รองรับเวอร์ชัน 2005 ในเวลานี้ (ในไม่ช้า!)

  • ส่งออกข้อมูลไปยัง T-SQL สำหรับไวยากรณ์ MSSQL และ MySQL อย่างรวดเร็ว

  • รองรับ CSV, TXT, XML! ใช้ศักยภาพพลังงานและความเร็วอย่างเต็มที่ที่ SQL มีให้

  • อย่ารอให้ Access หรือ Excel ทำการเขียนสคริปต์ให้คุณซึ่งอาจใช้เวลาหลายนาทีในการทำ - ให้ SQL Server ทำเพื่อคุณและคาดเดาการทำงานทั้งหมดของการส่งออกข้อมูล!

  • กำหนดค่าเอาต์พุตข้อมูลของคุณเพื่อการสำรองข้อมูลที่รวดเร็วการจัดการ DDL และอื่น ๆ ...

  • เปลี่ยนชื่อตารางและสกีมาฐานข้อมูลตามความต้องการของคุณได้อย่างรวดเร็วและมีประสิทธิภาพ

  • ส่งออกชื่อคอลัมน์หรือเพียงสร้างข้อมูลโดยไม่มีชื่อ

  • คุณสามารถเลือกคอลัมน์ที่จะสคริปต์

  • คุณสามารถเลือกชุดข้อมูลย่อย (WHERE clause)

  • คุณสามารถเลือกการเรียงลำดับข้อมูล (ORDER BY clause)

  • อรรถประโยชน์การสำรองข้อมูลที่ยอดเยี่ยมสำหรับการดำเนินการดีบั๊กฐานข้อมูลที่ต้องการการจัดการข้อมูล อย่าสูญเสียข้อมูลขณะทำการทดสอบ จัดการกับข้อมูลได้ทันที!


2

ทั้งหมดข้างต้นเป็นสิ่งที่ดี แต่ถ้าคุณต้องการ

  1. ส่งออกข้อมูลจากหลายมุมมองและตารางด้วยการรวม
  2. สร้างคำสั่งแทรกสำหรับ RDBMS ที่แตกต่างกัน
  3. โอนย้ายข้อมูลจาก RDBMS ใด ๆ ไปยัง RDBMS ใด ๆ

จากนั้นเคล็ดลับต่อไปนี้เป็นเพียงวิธีเดียวเท่านั้น

ก่อนอื่นเรียนรู้วิธีสร้างสปูลไฟล์หรือส่งออกชุดผลลัพธ์จากไคลเอนต์บรรทัดคำสั่ง db แหล่งที่มา สองเรียนรู้วิธีดำเนินการคำสั่ง sql บน db ปลายทาง

สุดท้ายสร้างคำสั่งแทรก (และคำสั่งอื่น ๆ ) สำหรับฐานข้อมูลปลายทางโดยใช้สคริปต์ sql ในฐานข้อมูลต้นทาง เช่น

SELECT '-- SET the correct schema' FROM dual;
SELECT 'USE test;' FROM dual;
SELECT '-- DROP TABLE IF EXISTS' FROM dual;
SELECT 'IF OBJECT_ID(''table3'', ''U'') IS NOT NULL DROP TABLE dbo.table3;' FROM dual;
SELECT '-- create the table' FROM dual;
SELECT 'CREATE TABLE table3 (column1 VARCHAR(10), column2 VARCHAR(10));' FROM dual;

SELECT 'INSERT INTO table3 (column1, column2) VALUES (''', table1.column1, ''',''', table2.column2, ''');' FROM table1 JOIN table2 ON table2.COLUMN1 = table1.COLUMN1;

ตัวอย่างข้างต้นถูกสร้างขึ้นสำหรับฐานข้อมูลของ Oracle ซึ่งจำเป็นต้องใช้การใช้งานคู่สำหรับการเลือกแบบไม่มีตาราง

ชุดผลลัพธ์จะมีสคริปต์สำหรับ db ปลายทาง


1

นี่คือตัวอย่างของการสร้างสคริปต์การย้ายข้อมูลโดยใช้เคอร์เซอร์เพื่อทำซ้ำตารางต้นฉบับ

SET NOCOUNT ON;  
DECLARE @out nvarchar(max) = ''
DECLARE @row nvarchar(1024)
DECLARE @first int = 1

DECLARE cur CURSOR FOR 
    SELECT '(' + CONVERT(CHAR(1),[Stage]) + ',''' + [Label] + ''')'
    FROM CV_ORDER_STATUS
    ORDER BY [Stage]

PRINT 'SET IDENTITY_INSERT dbo.CV_ORDER_STATUS ON'
PRINT 'GO'

PRINT 'INSERT INTO dbo.CV_ORDER_STATUS ([Stage],[Label]) VALUES';

OPEN cur
FETCH NEXT FROM cur
    INTO @row

WHILE @@FETCH_STATUS = 0
BEGIN
    IF @first = 1
        SET @first = 0
    ELSE
        SET @out = @out + ',' + CHAR(13);

    SET @out = @out + @row

    FETCH NEXT FROM cur into @row
END

CLOSE cur
DEALLOCATE cur

PRINT @out

PRINT 'SET IDENTITY_INSERT dbo.CV_ORDER_STATUS OFF'
PRINT 'GO'

0

หลังจากค้นหามากมันเป็นภาพที่ดีที่สุดของฉัน:

หากคุณมีข้อมูลจำนวนมากและต้องการสคริปต์ที่กะทัดรัดและสวยงามลองใช้: SSMS Tools Pack

มันสร้างการรวมคำสั่งที่เลือกทั้งหมดเพื่อแทรกรายการลงในตารางเป้าหมายและจัดการธุรกรรมได้ค่อนข้างดี

ภาพหน้าจอ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.