Database
 sql >> Baza danych >  >> RDS >> Database

Parsuj domyślne wartości parametrów za pomocą PowerShell – część 3

[ Część 1 | Część 2 | Część 3 ]

W części 1 i 2 tej serii przedstawiłem ParamParser:moduł PowerShell, który pomaga analizować informacje o parametrach – w tym wartości domyślne – z procedur składowanych i funkcji zdefiniowanych przez użytkownika, ponieważ SQL Server nie zrobi tego za nas.

W pierwszych kilku iteracjach kodu po prostu miałem plik .ps1, który umożliwiał wklejenie jednego lub więcej ciał modułu do zakodowanej na stałe $procedure zmienny. Wiele brakowało we wczesnych wersjach, ale do tej pory zajęliśmy się kilkoma rzeczami:

  • To teraz odpowiedni moduł – możesz uruchomić Import-Module .\ParamParser.psm1 a następnie wywołaj Get-ParsedParams funkcjonować przez całą sesję (oprócz innych korzyści, jakie daje moduł). To nie była trywialna konwersja – znowu chwała dla Willa White'a.
  • Obsługa funkcji zdefiniowanych przez użytkownika – wyjaśniłem w części 2, że nazwy funkcji są trudniejsze do przeanalizowania niż nazwy procedur; kod teraz obsługuje to poprawnie.
  • Automatyzacja ScriptDom.dll – nie możemy rozpowszechniać tego pliku klucza, a ponieważ możesz napotkać problemy, jeśli go nie masz (lub masz nieaktualną wersję), utworzył init.ps1 , który automatycznie pobiera i rozpakowuje najnowszą wersję (obecnie 150.4573.2) i umieszcza ją w tym samym folderze co inne pliki.
  • Dodatkowe źródła – nadal możesz przekazać surowy blok skryptu, jeśli chcesz, ale teraz możesz również używać wielu instancji i baz danych jako źródeł, odwoływać się bezpośrednio do jednego lub więcej plików lub ściągnąć cały .sql pliki z jednego lub więcej katalogów. Poniżej pokażę przykładową składnię.
  • Wyjście wskazuje źródło – ponieważ możesz przetwarzać wiele plików lub baz danych w jednym wywołaniu i możesz mieć wiele obiektów o tej samej nazwie, w tym źródło pomaga ujednoznacznieć. Nie mogę wiele zrobić, jeśli masz dwie instancje CREATE PROCEDURE dbo.blat ... w tym samym pliku lub surowym skrypcie, a źródło nie jest nawet wskazane, jeśli używasz -Script i przekazać w ciągu.
  • Poprawione wyjście – nadal możesz zrzucić wszystko do konsoli, ale możesz też użyć Out-GridView aby wyświetlić wyniki w formacie siatki (tutaj jest nudny przykład z AdventureWorks2019) lub zarejestrować informacje o parametrach w bazie danych do wykorzystania w innym miejscu.

Postępuj zgodnie z instrukcjami w pliku readme, aby pobrać i skonfigurować. Po sklonowaniu repozytorium uruchom .\init.ps1 a następnie Import-Module .\ParamParser.psm1 . Przetestuj to na prostym przykładzie, takim jak:

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

Wyjście (kliknij, aby powiększyć):

Istnieje jednak wiele innych kombinacji parametrów. Nagłówek pomocy pokazuje sporą część możliwej składni (i jeszcze raz dziękuję Willowi za wiele niesamowitych porządków tutaj):

Get-ParsedParams -?

Wyniki:

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}] []

Kilka dodatkowych przykładów

Aby przeanalizować wszystkie obiekty w c:\temp\db.sql :

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

Aby przeanalizować wszystkie pliki .sql w c:\temp\scripts\ (rekurencyjne) i h:\sql\ (również rekurencyjne):

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

Aby przeanalizować wszystkie obiekty w msdb w lokalnej nazwanej instancji SQL2019 przy użyciu uwierzytelniania Windows:

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

Aby przeanalizować wszystkie obiekty w msdb , floob i AdventureWorks2019 w lokalnej nazwanej instancji SQL2019 i otrzymaj monit o poświadczenia uwierzytelnienia SQL:

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

Aby przeanalizować wszystkie obiekty w msdb w lokalnej nazwanej instancji SQL2019 i przekaż dane uwierzytelniające SQL Authentication:

$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

Aby przeanalizować wszystkie pliki .sql w c:\temp\scripts\ (rekurencyjne) i umieść wyniki w tabeli w lokalnej nazwanej instancji SQL2019 w bazie danych, Utility , gdzie już utworzyłeś dbo.ParameterSetTVP , dbo.LogParameters itp. przy użyciu uwierzytelniania systemu Windows:

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

Aby przeanalizować wszystkie obiekty w msdb w lokalnej nazwanej instancji SQL2019 i napisz do Utility baza danych w tej samej instancji, przy użyciu tych samych danych uwierzytelniających 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

Zaczyna się robić bałagan, ale miejmy nadzieję, że automatyzujesz to, a nie piszesz ręcznie za każdym razem.

Następnym razem

Jak zawsze można wprowadzić więcej ulepszeń. Nie podobają mi się nazwy parametrów, które wymyśliłem, ale myślę, że są ważniejsze ulepszenia, takie jak obsługa błędów i rozszerzalność, które należy wprowadzić. Jakieś sugestie? Daj mi znać lub jeszcze lepiej wesprzyj się!

[ Część 1 | Część 2 | Część 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. 7 najważniejszych zadań wymagających SQL

  2. Specjalne wyspy

  3. SQL MIN() dla początkujących

  4. Korzystanie z funkcji T-SQL DATEADD, DATEDIFF i DATEPART w prostych terminach

  5. Wprowadzenie do HDFS | Co to jest HDFS i jak to działa?