SQL Server 2012: Tạo tập lệnh từ dòng lệnh


19

Tôi đang chạy SQL Server 2012.

Studio quản lý máy chủ SQL có tùy chọn nhấp chuột phải vào cơ sở dữ liệu, sau đó chọn Nhiệm vụ và tạo tập lệnh.

Có cách nào để tự động hóa điều đó thông qua dòng lệnh bằng cách nào đó?

Tôi muốn tạo một tập lệnh bao gồm lược đồ và dữ liệu của toàn bộ cơ sở dữ liệu.

Các công cụ như ScriptDBsqlpubwiz.exetất cả dường như nhắm mục tiêu SQL Server 2005. Còn SQL Server 2012 thì sao?

Câu trả lời:


20

Tốt nhất là sử dụng Powershell - nếu bạn sẽ sử dụng nó thường xuyên. Bạn có thể tham khảo thế hệ Script tự động với Powershell và SMO .

Ngoài ra, SQL Server PowerShell Tiện ích mở rộng (SQLPSX) có giá trị lớn khi làm việc với Powershell. Tất cả các mô-đun đang có tệp trợ giúp, ví dụ: Get-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

Đối với các công cụ của bên thứ ba, rất khuyến khích kiểm tra (có rất nhiều công cụ của bên thứ ba, nhưng bên dưới những công cụ tôi đã sử dụng và chúng rất tuyệt):


9

Tôi đã viết một tiện ích dòng lệnh mã nguồn mở có tên SchemaZen thực hiện điều này. Nó nhanh hơn nhiều so với kịch bản từ studio quản lý và đầu ra của nó thân thiện hơn với kiểm soát phiên bản. Nó hỗ trợ kịch bản cả lược đồ và dữ liệu.

Để tạo tập lệnh chạy:

tập lệnh schemazen.exe - máy chủ localhost --database db --scriptDir c: \ somedir

Sau đó, để tạo lại cơ sở dữ liệu từ các kịch bản chạy:

schemazen.exe tạo --server localhost --database db --scriptDir c: \ somedir

9

Tara Raj từ Microsoft gần đây đã thông báo rằng nhóm Microsoft SQL đã phát hành một bộ công cụ dòng lệnh để tạo các tập lệnh T-SQL dường như thực hiện chính xác những gì bạn đã hỏi:

mss-scripter

Mssql-scripter là dòng lệnh đa nền tảng tương đương với trải nghiệm Generate Sc Script Wizard được sử dụng rộng rãi trong SSMS.

Bạn có thể sử dụng mssql-scripter trên Linux, macOS và Windows để tạo ngôn ngữ định nghĩa dữ liệu (DDL) và ngôn ngữ thao tác dữ liệu (DML) cho các đối tượng cơ sở dữ liệu trong SQL Server chạy ở mọi nơi, Cơ sở dữ liệu SQL SQL và Kho dữ liệu Azure SQL . Bạn có thể lưu tập lệnh T-SQL được tạo vào tệp .sql hoặc chuyển nó sang các tiện ích * nix tiêu chuẩn (ví dụ: sed, awk, grep) để chuyển đổi thêm. Bạn có thể chỉnh sửa tập lệnh được tạo hoặc kiểm tra tập lệnh thành kiểm soát nguồn và sau đó thực thi tập lệnh trong các quy trình triển khai cơ sở dữ liệu SQL hiện tại và các đường ống DevOps bằng các công cụ dòng lệnh SQL đa nền tảng tiêu chuẩn như sqlcmd.

Mssql-scripter được xây dựng bằng Python và kết hợp các nguyên tắc khả dụng của các công cụ Azure CLI 2.0 mới. Mã nguồn có thể được tìm thấy trên Github tại https://github.com/Microsoft/sql-xplat-cli và chúng tôi hoan nghênh sự đóng góp của bạn và yêu cầu kéo!

Một số ví dụ về sử dụng:

Tạo tập lệnh DDL cho tất cả các đối tượng cơ sở dữ liệu (mặc định) trong cơ sở dữ liệu Adventureworks và xuất ra thiết bị xuất chuẩn

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

Tạo tập lệnh DDL cho tất cả các đối tượng cơ sở dữ liệu và tập lệnh DML (câu lệnh INSERT) cho tất cả các bảng trong cơ sở dữ liệu Adventureworks và lưu tập lệnh vào tệp

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

0

Bạn có thể sử dụng các phiên bản dòng lệnh của xQuery Schema So sánhxQuery Data So sánh . Với các phiên bản dòng lệnh, bạn có thể lên lịch so sánh dữ liệu và lược đồ định kỳ với cơ sở dữ liệu trống và điều này luôn có các tập lệnh để xây dựng một bản sao chính xác của phiên bản cơ sở dữ liệu mới nhất của bạn từ đầu.

Tiết lộ: Tôi đang liên kết với xQuery.


0

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 ().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.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.