Database
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Database

Phân tích cú pháp các giá trị mặc định của tham số bằng PowerShell - Phần 3

[Phần 1 | Phần 2 | Phần 3]

Trong phần 1 và phần 2 của loạt bài này, tôi đã giới thiệu ParamParser:một mô-đun PowerShell giúp phân tích thông tin tham số - bao gồm các giá trị mặc định - từ các thủ tục được lưu trữ và các hàm do người dùng xác định, bởi vì SQL Server sẽ không làm điều đó cho chúng tôi.

Trong vài lần lặp lại mã đầu tiên, tôi chỉ đơn giản có một tệp .ps1 cho phép bạn dán một hoặc nhiều thân mô-đun vào một $procedure được mã hóa cứng Biến đổi. Còn thiếu rất nhiều điều trong các phiên bản đầu tiên đó, nhưng chúng tôi đã giải quyết một số điều cho đến nay:

  • Bây giờ nó là một mô-đun thích hợp - bạn có thể chạy Import-Module .\ParamParser.psm1 và sau đó gọi Get-ParsedParams hoạt động trong suốt một phiên (ngoài những lợi ích khác mà bạn nhận được từ một mô-đun). Đây không phải là một chuyển đổi tầm thường - lại kudo cho Will White.
  • Hỗ trợ chức năng do người dùng xác định - Tôi đã giải thích trong phần 2 cách tên hàm khó phân tích cú pháp hơn tên thủ tục; mã bây giờ xử lý điều này đúng cách.
  • Tự động hóa ScriptDom.dll - chúng tôi không được phép phân phối lại tệp khóa này và vì bạn có thể gặp sự cố nếu bạn không có nó (hoặc có phiên bản lỗi thời), Sẽ tạo init.ps1 , tự động tải xuống và trích xuất phiên bản mới nhất (hiện tại là 150.4573.2) và đặt nó vào cùng thư mục với các tệp khác.
  • Nguồn bổ sung - bạn vẫn có thể chuyển vào khối tập lệnh thô nếu muốn, nhưng giờ đây bạn cũng có thể sử dụng nhiều phiên bản và cơ sở dữ liệu làm nguồn, tham chiếu trực tiếp một hoặc nhiều tệp hoặc lấy tất cả .sql các tệp từ một hoặc nhiều thư mục. Tôi sẽ hiển thị một số cú pháp ví dụ bên dưới.
  • Đầu ra cho biết nguồn - vì bạn có thể xử lý nhiều tệp hoặc cơ sở dữ liệu trong một lần gọi và bạn có thể có nhiều đối tượng có cùng tên, bao gồm cả nguồn giúp phân biệt. Tôi không thể làm được gì nhiều nếu bạn có hai trường hợp CREATE PROCEDURE dbo.blat ... trong cùng một tệp hoặc tập lệnh thô và nguồn thậm chí không được chỉ ra nếu bạn sử dụng -Script và chuyển vào một chuỗi.
  • Đầu ra được cải thiện - bạn vẫn có thể kết xuất mọi thứ vào bảng điều khiển, nhưng bạn cũng có thể sử dụng Out-GridView để xem kết quả ở định dạng lưới (đây là một ví dụ nhàm chán từ AdventureWorks2019) hoặc ghi thông tin tham số vào cơ sở dữ liệu để sử dụng ở nơi khác.

Làm theo hướng dẫn trong readme để tải xuống và thiết lập. Khi bạn đã nhân bản kho lưu trữ, hãy chạy .\init.ps1 rồi đến Import-Module .\ParamParser.psm1 . Kiểm tra nó bằng một ví dụ đơn giản, như:

Get-ParsedParams -Script "CREATE PROCEDURE dbo.a @b int = 5 out AS PRINT 1;" -GridView

Đầu ra (bấm để phóng to):

Tuy nhiên, có rất nhiều kết hợp tham số khác. Tiêu đề trợ giúp hiển thị một đoạn tốt cú pháp có thể có (và một lần nữa cảm ơn Will vì đã có rất nhiều thao tác dọn dẹp tuyệt vời ở đây):

Get-ParsedParams -?

Kết quả:

Get-ParsedParams [-Script] [[-GridView]] [[-Console]] [[-LogToDatabase]] [[-LogToDBAuthenticationMode] {SQL | Windows}] []

Get-ParsedParams [-File] [[-GridView]] [[-Console]] [[-LogToDatabase]] [[-LogToDBAuthenticationMode ] {SQL | Windows}] []

Get-ParsedParams [-Directory] [[-GridView]] [[-Console]] [[-LogToDatabase]] [[-LogToDBAuthenticationMode ] {SQL | Windows}] []

Get-ParsedParams [-ServerInstance] [-Database] [[-AuthenticationMode] {SQL | Windows}] [[-GridView]] [[-Console]] [[-LogToDatabase]] [[-LogToDBAuthenticationMode] {SQL | Windows}] []

Một vài ví dụ khác

Để phân tích cú pháp tất cả các đối tượng trong c:\temp\db.sql :

Get-ParsedParams -File "C:\temp\db.sql" -GridView

Để phân tích cú pháp tất cả các tệp .sql trong c:\temp\scripts\ (đệ quy) và h:\sql\ (cũng đệ quy):

Get-ParsedParams -Directory "C:\temp\scripts\", "H:\sql\" -GridView

Để phân tích cú pháp tất cả các đối tượng trong msdb trên phiên bản có tên cục bộ SQL2019 sử dụng xác thực Windows:

Get-ParsedParams -ServerInstance ".\SQL2019" -Database "msdb" -GridView

Để phân tích cú pháp tất cả các đối tượng trong msdb , floobAdventureWorks2019 trên phiên bản có tên cục bộ SQL2019 và được nhắc về thông tin xác thực SQL:

Get-ParsedParams -ServerInstance ".\SQL2019" -Database "msdb","floob","AdventureWorks" -AuthenticationMode "SQL" -GridView

Để phân tích cú pháp tất cả các đối tượng trong msdb trên phiên bản có tên cục bộ SQL2019 và chuyển thông tin xác thực SQL:

$password = ConvertTo-SecureString -AsPlainText -Force -String "Str0ngP@ssw0rd"
$credential = New-Object -TypeName "PSCredential" -ArgumentList "SQLAuthUsername", $password
Get-ParsedParams -ServerInstance ".\SQL2019" -Database "msdb" -AuthenticationMode "SQL" -SqlCredential $credential -GridView

Để phân tích cú pháp tất cả các tệp .sql trong c:\temp\scripts\ (đệ quy) và đặt kết quả vào một bảng trong phiên bản có tên cục bộ SQL2019 trong cơ sở dữ liệu, Utility , nơi bạn đã tạo dbo.ParameterSetTVP , dbo.LogParameters , v.v., bằng Xác thực Windows:

Get-ParsedParams -Directory "C:\temp\scripts" -LogToDatabase -LogToDBServerInstance ".\SQL2019" -LogToDBDatabase "Utility"

Để phân tích cú pháp tất cả các đối tượng trong msdb trên phiên bản có tên cục bộ SQL2019 và ghi vào Utility cơ sở dữ liệu trên cùng một phiên bản, sử dụng cùng thông tin xác thực SQL:

$password = ConvertTo-SecureString -AsPlainText -Force -String "Str0ngP@ssw0rd"
$credential = New-Object -TypeName "PSCredential" -ArgumentList "SQLAuthUsername", $password
Get-ParsedParams -ServerInstance ".\SQL2019" -Database "msdb" -AuthenticationMode "SQL" -SqlCredential $credential -LogToDatabase ` 
                 -LogToDBServerInstance ".\SQL2019" -LogToDBDatabase "Utility" -LogToDBAuthenticationMode "SQL" -LogToDBSqlCredential $credential

Điều đó bắt đầu trở nên lộn xộn, nhưng hy vọng bạn đang tự động hóa việc này và không phải gõ nó bằng tay mọi lúc.

Lần sau

Như mọi khi, có nhiều cải tiến hơn có thể được thực hiện. Tôi không thích tên tham số mà tôi nghĩ ra, nhưng tôi nghĩ rằng có nhiều cải tiến quan trọng hơn, chẳng hạn như xử lý lỗi và khả năng mở rộng cần được thực hiện. Bất kỳ đề xuất? Vui lòng cho tôi biết hoặc tốt hơn là đóng góp!

[Phần 1 | Phần 2 | Phần 3]


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hiểu sp_updatestats thực sự cập nhật những gì

  2. SQL còn lại tham gia

  3. Cách so sánh ngày tháng trong SQL

  4. Làm thế nào để che giấu các bảng và bảo tồn tính toàn vẹn được tham chiếu

  5. CẬP NHẬT SQL:Tìm hiểu cách cập nhật giá trị trong bảng