Alterando o Collation de Colunas das Tabelas com Powershell


 

Tarde gente..

Vai mais um script que acredito ser útil : Alterar Collations das colunas de tabelas.

Pra começar, aquele nosso arquivinho servers.txt com todos os servidores a serem alterados.

No meu caso fica em C:\PS\Servers

image 

E também usamos o arquivo functions.ps1 que pode ser baixado aqui.
(lembre-se de deixar o functions.ps1 no mesmo path do script principal)

A SMO também possui as restrições que TSQL tem (PK, FK, Indice..ect) mas estes campos que não se consegui alterar serão logados.

Vamos ao Script :

param (      [string] $Collation)
             [string] $path

 

[reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo") | out-null

 

# load functions file
. C:\PS\PsScripts\Functions.ps1

 

$TodayDateErr = get-date -format "yyyyMMddhhmmss"

 

$Server = ""
$table = ""
if ($Path -eq $null)
{
       $Path = "C:\temp"
}     
$Error.Clear()

  

foreach ($svr in get-content "C:\ps\servers\servers.txt" )
{
    $Server=New-Object "Microsoft.SqlServer.Management.Smo.Server" "$svr"
    $Server.Databases   | where-object {$_.IsSystemObject -eq $FALSE -and
    $_.IsAccessible -eq $TRUE  } | foreach {
         foreach  ($table in $Server.Databases[$_.name].tables ) {
                    $db = $Server.Databases[$_.name]
                    if (!$table.IsSystemObject)
                    {
                           $tableName = $table.name

                            

                                                   
                           $table.columns | Where-Object {$_.datatype -match "char|varchar|nvarchar|text|ntext|nchar"} | foreach {
 
                               trap  [Exception] {

                                  $Err = "Table : " + $tablename + " | " + $_.Exception.Message
                                  Save-Log "Collation" "$svr" "$db" "$Err" "$Path" "$TodayDateErr"
                                  $Error.Clear()
                                  continue;
                               }  

                           $_.Collation = $Collation
                           $_.Alter()

                          

                           }     
                    }
             }     
       }     
}

 

Baixe ele aqui

Bom, este script te gera um arquivo de erro (um log) com as colunas que ele não conseguiu alterar, informando o server, database, tabela, coluna e mensagem de erro. Por ali você pode pegar os caras que não funcionaram e alterar na mão.

Este arquivo, o path dele você passa na chamada do ps1, juntamente com o collation novo.

Digamos que eu queria trocar o collation de todas as tabelas, em todos os databases, na lista do servers.txt para Latin1_General_CS_AI

C:\ps\psscripts\SetCollation.ps1 “Latin1_General_CS_AI” “C:\temp”

Aonde o primeiro parâmetro é o Collation Novo e o Segundo o path do arquivo de erro.

QQ dúvida …tumm.tum..tumtum..tum

POWERSHELL ROCKS !!!!!

“My eyes are open wide
By the way I made it through the day
I watch the world outside
By the way I’m leaving out today

I just saw Hayley’s comet she waved
Said “why you always running in place?
Even the man in the moon disappeared
Somewhere in the stratosphere”

Tell my mother, tell my father
I’ve done the best I can
To make them realize
This is my life
I hope they understand
I’m not angry, I’m just saying
Sometimes goodbye is a second chance”

Second Chance

Shinedown

About Laerte Junior

Laerte Junior Laerte Junior is a SQL Server specialist and an active member of WW SQL Server and the Windows PowerShell community. He also is a huge Star Wars fan (yes, he has the Darth Vader´s Helmet with the voice changer). He has a passion for DC comics and living the simple life. "May The Force be with all of us"
This entry was posted in Algo que Esqueci de Categorizar. Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s