sql >> Databasteknik >  >> RDS >> Database

Analysera parameterns standardvärden med PowerShell – Del 3

[ Del 1 | Del 2 | Del 3 ]

I del 1 och del 2 av denna serie introducerade jag ParamParser:en PowerShell-modul som hjälper till att analysera parameterinformation – inklusive standardvärden – från lagrade procedurer och användardefinierade funktioner, eftersom SQL Server inte kommer att göra det åt oss.

I de första iterationerna av koden hade jag helt enkelt en .ps1-fil som gjorde att du kunde klistra in en eller flera modulkroppar i en hårdkodad $procedure variabel. Det saknades mycket i de tidiga versionerna, men vi har tagit upp flera saker hittills:

  • Det är nu en riktig modul – du kan köra Import-Module .\ParamParser.psm1 och anropa sedan Get-ParsedParams fungera under en session (utöver de andra fördelarna du får av en modul). Detta var inte en trivial omvandling – kudos igen till Will White.
  • Stöd för användardefinierade funktioner – Jag förklarade i del 2 hur funktionsnamn är svårare att tolka än procedurnamn; koden hanterar nu detta korrekt.
  • Automatisera ScriptDom.dll – vi får inte omdistribuera den här nyckelfilen, och eftersom du kan stöta på problem om du inte har den (eller har en föråldrad version), skapade Will init.ps1 , som automatiskt hämtar och extraherar den senaste versionen (för närvarande 150.4573.2) och placerar den i samma mapp som de andra filerna.
  • Ytterligare källor – du kan fortfarande skicka in ett råskriptblock om du vill, men nu kan du också använda flera instanser och databaser som källor, referera till en eller flera filer direkt eller dra in alla .sql filer från en eller flera kataloger. Jag ska visa några exempel på syntax nedan.
  • Utdata anger källa – eftersom du kan behandla flera filer eller databaser i ett anrop, och du kan ha flera objekt med samma namn, inklusive källan hjälper till att disambiguera. Jag kan inte göra mycket om du har två instanser av CREATE PROCEDURE dbo.blat ... i samma fil eller råskript, och källan anges inte ens om du använder -Script och passera i ett snöre.
  • Förbättrad utdata – du kan fortfarande dumpa allt till konsolen, men du kan också använda Out-GridView för att se resultaten i ett rutnätsformat (här är ett tråkigt exempel från AdventureWorks2019), eller logga parameterinformationen till en databas för konsumtion någon annanstans.

Följ instruktionerna i readme för att ladda ner och konfigurera. När du har klonat förvaret, kör .\init.ps1 och sedan Import-Module .\ParamParser.psm1 . Testa det med ett enkelt exempel, som:

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

Utdata (klicka för att förstora):

Det finns dock många andra parameterkombinationer också. Hjälphuvudet visar en bra bit av den möjliga syntaxen (och tack igen till Will för många fantastiska rensningar här):

Get-ParsedParams -?

Resultat:

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] [-Databas] [[-AuthenticationMode] {SQL | Windows}] [[-GridView]] [[-Console]] [[-LogToDatabase]] [[-LogToDBAuthenticationMode] {SQL | Windows}] []

Några fler exempel

Att analysera alla objekt i c:\temp\db.sql :

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

Att analysera alla .sql-filer i c:\temp\scripts\ (rekursiv) och h:\sql\ (även rekursiv):

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

För att analysera alla objekt i msdb på den lokala namngivna instansen SQL2019 med Windows-autentisering:

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

För att analysera alla objekt i msdb , floob och AdventureWorks2019 på den lokala namngivna instansen SQL2019 och bli tillfrågad om SQL-autentiseringsuppgifter:

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

För att analysera alla objekt i msdb på den lokala namngivna instansen SQL2019 och skicka in SQL-autentiseringsuppgifter:

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

Att analysera alla .sql-filer i c:\temp\scripts\ (rekursiv) och lägg resultaten i en tabell i den lokala namngivna instansen SQL2019 i en databas, Utility , där du redan har skapat dbo.ParameterSetTVP , dbo.LogParameters , etc., med Windows-autentisering:

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

För att analysera alla objekt i msdb på den lokala namngivna instansen SQL2019 och skriv till Utility databas på samma instans, med samma SQL-autentiseringsuppgifter:

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

Det börjar bli rörigt, men förhoppningsvis automatiserar du det här och inte skriver det för hand varje gång.

Nästa gång

Som alltid finns det fler förbättringar som kan göras. Jag gillar inte parameternamnen jag har kommit på, men jag tycker att det finns viktigare förbättringar, som felhantering och utökbarhet som bör göras. Några förslag? Meddela mig eller, ännu bättre, bidra!

[ Del 1 | Del 2 | Del 3 ]


  1. Hur man hanterar Ruby on Rails-fel:Installera postgresql-adaptern:`gem install activerecord-postgresql-adapter'

  2. Exportera data till JSON-fil i Oracle 11g med PL/SQL

  3. Ta bort flera rader genom att markera kryssrutor med PHP

  4. PostgreSQL-distribution och konfiguration med Puppet