SQL Server 2012: สร้างสคริปต์จากบรรทัดคำสั่ง


19

ฉันใช้ SQL Server 2012

Studio การจัดการเซิร์ฟเวอร์ SQL มีตัวเลือกให้คลิกขวาบนฐานข้อมูลจากนั้นเลือกงานและสร้างสคริปต์

มีวิธีการที่ทำให้โดยอัตโนมัติผ่านทางบรรทัดคำสั่งอย่างใด?

ฉันต้องการสร้างสคริปต์ที่มีสคีมาและข้อมูลของฐานข้อมูลทั้งหมด

เครื่องมือที่ชอบScriptDBและsqlpubwiz.exeดูเหมือนจะตั้งเป้าหมาย SQL Server 2005 แล้ว SQL Server 2012 ล่ะ?

คำตอบ:


20

ดีที่สุดคือการใช้ Powershell - ถ้าคุณจะใช้มันบ่อยๆ คุณสามารถดูได้โดยอัตโนมัติสคริปต์รุ่นกับPowershellและ SMO

นอกจากนี้SQL Server PowerShell Extensions (SQLPSX)นั้นมีประโยชน์อย่างยิ่งเมื่อทำงานกับ Powershell ทุกโมดูลจะมีไฟล์ความช่วยเหลือเช่นรับ SqlScripter

Get-SqlDatabase -dbname database1 -sqlserver server | Get-SqlTable | Get-SqlScripter | Set-Content -Path D:\scripts\script.sql
Get-SqlDatabase -dbname database1 -sqlserver server | Get-SqlStoredProcedure | Get-SqlScripter
Get-SqlDatabase -dbname database1 -sqlserver server | Get-SqlView | Get-SqlScripter

สำหรับเครื่องมือของบุคคลที่สามขอแนะนำให้ตรวจสอบ (มีเครื่องมือของบุคคลที่สามมากมายอยู่ที่นั่น แต่เครื่องมือที่ฉันใช้มาและต่ำกว่านั้นมาก):


10

Tara Raj จาก Microsoftเพิ่งประกาศว่าทีม Microsoft SQL ได้เปิดตัวชุดเครื่องมือบรรทัดคำสั่งเพื่อสร้างสคริปต์ T-SQLที่ดูเหมือนจะทำสิ่งที่คุณถาม:

MSSQL-เก่ง

Mssql-scripter เป็นบรรทัดคำสั่งแบบหลายแพลตฟอร์มที่เทียบเท่ากับประสบการณ์การสร้างตัวช่วยสร้างสคริปต์ที่ใช้กันอย่างแพร่หลายใน SSMS

คุณสามารถใช้ mssql-scripter บน Linux, macOS และ Windows เพื่อสร้าง data definition language (DDL) และ T-SQL สคริปต์การจัดการข้อมูลภาษา (DML) สำหรับวัตถุฐานข้อมูลใน SQL Server ที่ทำงานที่ใดก็ได้, ฐานข้อมูล Azure SQL และ Azure SQL Data Azure . คุณสามารถบันทึกสคริปต์ T-SQL ที่สร้างไปยังไฟล์. sql หรือไพพ์ไปยังยูทิลิตี้ * nix มาตรฐาน (ตัวอย่างเช่น sed, awk, grep) สำหรับการแปลงเพิ่มเติม คุณสามารถแก้ไขสคริปต์ที่สร้างขึ้นหรือตรวจสอบลงในการควบคุมแหล่งที่มาและดำเนินการสคริปต์ในกระบวนการปรับใช้ฐานข้อมูล SQL ที่มีอยู่ของคุณและท่อ DevOps ด้วยเครื่องมือบรรทัดคำสั่ง SQL หลากหลายแพลตฟอร์มมาตรฐานเช่น sqlcmd

Mssql-scripter สร้างขึ้นโดยใช้ Python และรวมเอาหลักการการใช้งานของเครื่องมือ Azure CLI 2.0 ใหม่ ซอร์สโค้ดสามารถพบได้ใน Github ที่https://github.com/Microsoft/sql-xplat-cliและเรายินดีรับการสนับสนุนและคำขอของคุณ!

ตัวอย่างการใช้งาน:

สร้างสคริปต์ DDL สำหรับวัตถุฐานข้อมูลทั้งหมด (ค่าเริ่มต้น) ในฐานข้อมูล Adventureworks และส่งออกไปยัง stdout

$ mssql-scripter -S localhost -d AdventureWorks -U sa

สร้างสคริปต์ DDL สำหรับวัตถุฐานข้อมูลทั้งหมดและสคริปต์ DML (คำสั่ง INSERT) สำหรับตารางทั้งหมดในฐานข้อมูล Adventureworks และบันทึกสคริปต์ลงในไฟล์

$ mssql-scripter -S localhost -d AdventureWorks -U sa schema-and-data  > ./output.sql

9

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

ในการสร้างสคริปต์ให้เรียกใช้:

สคริปต์ schemazen.exe --server localhost - ฐานข้อมูล db --scriptDir c: \ somedir

จากนั้นเพื่อสร้างฐานข้อมูลจากสคริปต์ที่รัน:

schemazen.exe สร้าง --server localhost - ฐานข้อมูล db --scriptDir c: \ somedir

0

คุณสามารถใช้รุ่นบรรทัดคำสั่งของxSQL เปรียบเทียบ SchemaและxSQL ข้อมูลเปรียบเทียบ ด้วยเวอร์ชันบรรทัดคำสั่งคุณสามารถกำหนดตารางเวลาข้อมูลและการเปรียบเทียบสคีมากับฐานข้อมูลเปล่าและสิ่งนี้จะมีสคริปต์เพื่อสร้างแบบจำลองที่แน่นอนของเวอร์ชันล่าสุดของฐานข้อมูลของคุณจากศูนย์

การเปิดเผยข้อมูล: ฉันเข้าร่วมกับ xSQL


0

เพียงแค่อัปเดต: ในรุ่นปัจจุบันของโมดูลเซิร์ฟเวอร์ PowerShell ของ SQL Server (และบนเซิร์ฟเวอร์ฉันเชื่อว่าทดสอบใน SSMS 17) ตัวเลือกเหล่านี้ส่วนใหญ่เป็นคำสั่งและวิธีการดั้งเดิม

ตัวอย่างเช่นคุณสามารถใช้Get-SqlDatabaseและวิธีการเช่น . Script ()และ. EnumScript ()มันมีประโยชน์จริง ๆ และเรียบง่ายโดยเฉพาะอย่างยิ่งถ้าคุณต้องการแนวทางที่ละเอียดยิ่งขึ้น (ตารางที่เฉพาะเจาะจงและวัตถุอื่น ๆ )

ตัวอย่างเช่นสิ่งนี้จะสร้างสคริปต์ CREATE สำหรับฟังก์ชั่นที่ผู้ใช้กำหนดและบันทึกลงในไฟล์:

$Database = Get-SqlDatabase -ServerInstance $YourSqlServer -Name $YourDatabaseName

$MyFuncs = $Database.UserDefinedFunctions | Where Schema -eq "dbo"
$MyFuncs.Script() | Out-File -FilePath ".\SqlScripts\MyFunctions.sql"

หากคุณต้องการข้อมูลสคริปต์และองค์ประกอบเช่นดัชนีคีย์ทริกเกอร์ ฯลฯ คุณจะต้องระบุตัวเลือกการเขียนสคริปต์เช่นนี้:

$scriptOptions = New-Object -TypeName Microsoft.SqlServer.Management.Smo.ScriptingOptions

$scriptOptions.NoCollation = $True
$scriptOptions.Indexes = $True
$scriptOptions.Triggers = $True
$scriptOptions.DriAll = $True
$scriptOptions.ScriptData = $True

$Database.Tables.EnumScript($scriptOptions) | Out-File -FilePath ".\AllMyTables.sql"

โปรดทราบว่าวิธีการ Script () ไม่รองรับข้อมูลสคริปต์ ใช้ EnumScript () สำหรับตาราง

ตารางเดียว :

($Database.Tables | Where Name -eq "MyTableName").EnumScript($scriptOptions)

มุมมองทั้งหมดของคุณบันทึกหนึ่งไฟล์ต่อการดูแต่ละครั้ง DROP และสร้างสคริปต์:

ForEach ($view in $($Database.Views | Where Schema -eq "dbo")) {

    "`nIF OBJECT_ID('$($view.Name)') IS NOT NULL DROP VIEW $($view.Name);`n`n" | Out-File -FilePath ".\SqlScripts\$($view.Name).sql"    
    $view.Script() | Out-File -FilePath ".\SqlScripts\$($view.Name).sql" -Append
}

หวังว่านี่จะช่วยได้

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