Chỉ là một bản cập nhật: trong các phiên bản hiện tại của các mô-đun quyền hạn SQL Server (SQL Server 2014 trở đi, tôi đã tin. Đã thử nghiệm trên SSMS 17), hầu hết các tùy chọn này là các lệnh và phương thức gốc.
Chẳng hạn, bạn có thể sử dụng Get-SqlDatabase và các phương thức như .Script () và .EnumScript (). Nó thực sự hữu ích và đơn giản, đặc biệt nếu bạn muốn một cách tiếp cận chi tiết hơn (các bảng cụ thể và các đối tượng khác).
Ví dụ: điều này sẽ tạo các tập lệnh CREATE cho các hàm do người dùng xác định và lưu nó vào tệp:
$Database = Get-SqlDatabase -ServerInstance $YourSqlServer -Name $YourDatabaseName
$MyFuncs = $Database.UserDefinedFunctions | Where Schema -eq "dbo"
$MyFuncs.Script() | Out-File -FilePath ".\SqlScripts\MyFunctions.sql"
Nếu bạn muốn dữ liệu tập lệnh và các thành phần như chỉ mục, khóa, trình kích hoạt, v.v., bạn sẽ phải chỉ định các tùy chọn tập lệnh, như sau:
$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"
Lưu ý rằng phương thức Script () không hỗ trợ dữ liệu tập lệnh. Sử dụng EnumScript () cho các bảng.
Một bảng duy nhất :
($Database.Tables | Where Name -eq "MyTableName").EnumScript($scriptOptions)
Tất cả các chế độ xem của bạn, lưu một tệp cho mỗi chế độ xem, tập lệnh DROP và CREATE:
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
}
Hi vọng điêu nay co ich.