sql >> Databáze >  >> RDS >> Database

Analyzujte výchozí hodnoty parametrů pomocí prostředí PowerShell – část 3

[ Část 1 | Část 2 | Část 3 ]

V části 1 a části 2 této série jsem představil ParamParser:modul PowerShell, který pomáhá analyzovat informace o parametrech – včetně výchozích hodnot – z uložených procedur a uživatelsky definovaných funkcí, protože SQL Server to za nás neudělá.

V prvních několika iteracích kódu jsem měl jednoduše soubor .ps1, který vám umožňoval vložit jedno nebo více těl modulů do pevně zakódovaného $procedure variabilní. V těchto raných verzích toho hodně chybělo, ale zatím jsme řešili několik věcí:

  • Nyní je to správný modul – můžete spustit Import-Module .\ParamParser.psm1 a poté zavolejte Get-ParsedParams fungovat během relace (kromě dalších výhod, které získáte z modulu). Nebyla to triviální konverze – znovu sláva Willu Whiteovi.
  • Podpora funkcí definovaných uživatelem – V části 2 jsem vysvětlil, jak je obtížnější analyzovat názvy funkcí než názvy procedur; kód to nyní zvládá správně.
  • Automatizace ScriptDom.dll – nemáme povoleno redistribuovat tento klíčový soubor, a protože můžete narazit na problémy, pokud jej nemáte (nebo máte zastaralou verzi), vytvořil Will init.ps1 , který automaticky stáhne a rozbalí nejnovější verzi (aktuálně 150.4573.2) a umístí ji do stejné složky jako ostatní soubory.
  • Další zdroje – stále můžete předat nezpracovaný blok skriptu, pokud chcete, ale nyní můžete také použít více instancí a databází jako zdroje, odkazovat přímo na jeden nebo více souborů nebo stáhnout všechny .sql soubory z jednoho nebo více adresářů. Níže ukážu několik příkladů syntaxe.
  • Výstup označuje zdroj – protože můžete zpracovat více souborů nebo databází v jednom volání a můžete mít více objektů se stejným názvem, včetně zdroje pomáhá jednoznačnost. Nemohu toho moc udělat, pokud máte dvě instance CREATE PROCEDURE dbo.blat ... ve stejném souboru nebo nezpracovaném skriptu a zdroj není ani uveden, pokud použijete -Script a předat řetězec.
  • Vylepšený výstup – stále můžete vše uložit do konzole, ale můžete také použít Out-GridView pro zobrazení výsledků ve formátu mřížky (zde je nudný příklad z AdventureWorks2019) nebo zalogování informací o parametrech do databáze pro spotřebu jinde.

Pro stažení a nastavení postupujte podle pokynů v souboru readme. Po naklonování úložiště spusťte .\init.ps1 a poté Import-Module .\ParamParser.psm1 . Vyzkoušejte to na jednoduchém příkladu, například:

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

Výstup (kliknutím zvětšíte):

Existuje však také mnoho dalších kombinací parametrů. Záhlaví nápovědy ukazuje značnou část možné syntaxe (a ještě jednou děkuji Willovi za spoustu úžasných úklidů):

Get-ParsedParams -?

Výsledky:

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] <řetězec[]> [-Databáze] <řetězec[]> [[-AuthenticationMode] {SQL | Windows}] [[-GridView]] [[-Console]] [[-LogToDatabase]] [[-LogToDBAuthenticationMode] {SQL | Windows}] []

Několik dalších příkladů

Chcete-li analyzovat všechny objekty v c:\temp\db.sql :

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

Chcete-li analyzovat všechny soubory .sql v c:\temp\scripts\ (rekurzivní) a h:\sql\ (také rekurzivní):

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

Chcete-li analyzovat všechny objekty v msdb na lokální pojmenované instanci SQL2019 pomocí ověřování systému Windows:

Get-ParsedParams -ServerInstance ".\SQL2019" -Databáze "msdb" -GridView

Chcete-li analyzovat všechny objekty v msdb , floob a AdventureWorks2019 na lokální pojmenované instanci SQL2019 a zobrazí se výzva k zadání přihlašovacích údajů SQL Authentication:

Get-ParsedParams -ServerInstance ".\SQL2019" -Databáze "msdb","floob","AdventureWorks" -AuthenticationMode "SQL" -GridView

Chcete-li analyzovat všechny objekty v msdb na lokální pojmenované instanci SQL2019 a předejte pověření SQL Authentication:

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

Chcete-li analyzovat všechny soubory .sql v c:\temp\scripts\ (rekurzivní) a umístěte výsledky do tabulky v místní pojmenované instanci SQL2019 v databázi, Utility , kde jste již vytvořili dbo.ParameterSetTVP , dbo.LogParameters , atd. pomocí ověřování Windows:

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

Chcete-li analyzovat všechny objekty v msdb na lokální pojmenované instanci SQL2019 a zapište do Utility databáze ve stejné instanci, pomocí stejných přihlašovacích údajů SQL:

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

Začíná to být chaotické, ale doufejme, že to automatizujete a nebudete to pokaždé psát ručně.

Příště

Jako vždy je možné provést více vylepšení. Nelíbí se mi názvy parametrů, které jsem vymyslel, ale myslím, že existují důležitější vylepšení, jako je zpracování chyb a rozšiřitelnost, která by měla být provedena. Nějaké návrhy? Dejte mi prosím vědět nebo ještě lépe přispějte!

[ Část 1 | Část 2 | Část 3 ]


  1. Použití pohledů MySQL

  2. Kód VBA pro přidání propojené tabulky s primárním klíčem

  3. Hodnoty oddělené čárkami v Oracle

  4. PL/SQL:jak vyvolám uživatelský vstup do procedury?