Database
 sql >> база данни >  >> RDS >> Database

Анализирайте стойностите по подразбиране на параметрите с помощта на PowerShell – част 3

[ Част 1 | Част 2 | Част 3 ]

В част 1 и част 2 от тази серия представих ParamParser:модул PowerShell, който помага да анализира информацията за параметрите – включително стойности по подразбиране – от съхранени процедури и дефинирани от потребителя функции, защото SQL Server няма да го направи вместо нас.

В първите няколко итерации на кода просто имах .ps1 файл, който ви позволяваше да поставите едно или повече тела на модула в твърдо кодирана $procedure променлива. В тези ранни версии липсваха много неща, но досега сме разгледали няколко неща:

  • Сега е подходящ модул – можете да стартирате Import-Module .\ParamParser.psm1 и след това извикайте Get-ParsedParams функционира по време на сесия (в допълнение към другите предимства, които получавате от модул). Това не беше тривиално преобразуване – поклон отново на Уил Уайт.
  • Поддръжка на дефинирани от потребителя функции – В част 2 обясних как имената на функциите са по-трудни за анализиране от имената на процедурите; сега кодът се справя правилно с това.
  • Автоматизиране на ScriptDom.dll – нямаме право да разпространяваме този ключов файл и тъй като можете да срещнете проблеми, ако го нямате (или имате остаряла версия), Уил създаде init.ps1 , който автоматично изтегля и извлича най-новата версия (понастоящем 150.4573.2) и я поставя в същата папка като другите файлове.
  • Допълнителни източници – все още можете да подавате необработен блок скрипт, ако желаете, но сега можете също да използвате множество екземпляри и бази данни като източници, да препращате директно към един или повече файлове или да изтегляте всички .sql файлове от една или повече директории. Ще покажа примерен синтаксис по-долу.
  • Изходът показва източник – тъй като можете да обработвате множество файлове или бази данни в едно извикване и може да имате няколко обекта с едно и също име, включително източникът помага да се разграничи. Не мога да направя много, ако имате два екземпляра на CREATE PROCEDURE dbo.blat ... в същия файл или необработен скрипт и източникът дори не е посочен, ако използвате -Script и преминете в низ.
  • Подобрен резултат – все още можете да изхвърлите всичко в конзолата, но можете също да използвате Out-GridView за да видите резултатите във формат на мрежа (ето скучен пример от AdventureWorks2019) или регистрирайте информацията за параметрите в база данни за консумация на друго място.

Следвайте инструкциите в readme, за да изтеглите и настроите. След като клонирате хранилището, стартирайте .\init.ps1 и след това Import-Module .\ParamParser.psm1 . Тествайте го с прост пример, като:

Get-ParsedParams -Script "СЪЗДАВАНЕ НА ПРОЦЕДУРА dbo.a @b int =5 out КАТО ПЕЧАТ 1;" -GridView

Изход (щракнете за увеличаване):

Има обаче и много други комбинации от параметри. Заглавката на помощта показва добра част от възможния синтаксис (и отново благодаря на Уил за много невероятно почистване тук):

Get-ParsedParams -?

Резултати:

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

Още няколко примера

За да анализирате всички обекти в c:\temp\db.sql :

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

За да анализирате всички .sql файлове в c:\temp\scripts\ (рекурсивен) и h:\sql\ (също рекурсивно):

Get-ParsedParams -Директория "C:\temp\scripts\", "H:\sql\" -GridView

За да анализирате всички обекти в msdb на локалния именуван екземпляр SQL2019 с помощта на удостоверяване на Windows:

Get-ParsedParams -ServerInstance ".\SQL2019" -База данни "msdb" -GridView

За да анализирате всички обекти в msdb , floob и AdventureWorks2019 на локалния именуван екземпляр SQL2019 и да получите подкана за идентификационни данни за SQL удостоверяване:

Get-ParsedParams -ServerInstance ".\SQL2019" -База данни "msdb","floob","AdventureWorks" -AuthenticationMode "SQL" -GridView

За да анализирате всички обекти в msdb на локалния именуван екземпляр SQL2019 и предайте идентификационни данни за SQL удостоверяване:

$password =ConvertTo-SecureString -AsPlainText -Force -String "Str0ngP@ssw0rd"$credential =Нов-обект -TypeName "PSCredential" -ArgumentList "SQLAuthUsername", $passwordGet-ParsedInstance -Serta\9Ser. "msdb" -AuthenticationMode "SQL" -SqlCredential $credential -GridView

За да анализирате всички .sql файлове в c:\temp\scripts\ (рекурсивен) и поставете резултатите в таблица в локалния наименован екземпляр SQL2019 в база данни, Utility , където вече сте създали dbo.ParameterSetTVP , dbo.LogParameters и др., използвайки удостоверяване на Windows:

Get-ParsedParams -Директория "C:\temp\scripts" -LogToDatabase -LogToDBServerInstance ".\SQL2019" -LogToDBDatabase "Помощна програма"

За да анализирате всички обекти в msdb на локалния именуван екземпляр SQL2019 и пишете в Utility база данни на същия екземпляр, като се използват същите идентификационни данни за SQL удостоверяване:

$password =ConvertTo-SecureString -AsPlainText -Force -String "Str0ngP@ssw0rd"$credential =Нов-обект -TypeName "PSCredential" -ArgumentList "SQLAuthUsername", $passwordGet-ParsedInstance -Serta\9Ser. "msdb" -Режим на удостоверяване "SQL" -SqlCredential $credential -LogToDatabase ` -LogToDBServerInstance ".\SQL2019" -LogToDBDatabase "Помощна програма" -LogToDBAuthenticationMode "SQL" -LogToDBAuthenticationMode "SQL" -LogToDBSql> $ToDBSql> 

Това започва да става объркано, но да се надяваме, че автоматизирате това, а не го пишете на ръка всеки път.

Следващия път

Както винаги, има още подобрения, които могат да бъдат направени. Не харесвам имената на параметрите, които измислих, но мисля, че има по-важни подобрения, като обработка на грешки и разширяемост, които трябва да се направят. Някакви предположения? Моля, уведомете ме или, още по-добре, допринесете!

[ Част 1 | Част 2 | Част 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. Модел на данни за доставка в ресторант

  2. Drop срещу Truncate в SQL

  3. 5 безпроблемни съвета за използване на SQL UPDATE изявление с JOIN

  4. Абонаментен модел на бизнес данни

  5. Използване на Salesforce SOQL от Linux