[ Čá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é zavolejteGet-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]Get-ParsedParams [-File]
Get-ParsedParams [-Directory]
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 ]