เพียงแค่อัปเดต: ในรุ่นปัจจุบันของโมดูลเซิร์ฟเวอร์ 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
}
หวังว่านี่จะช่วยได้