Guest User

Untitled

a guest
Nov 18th, 2017
398
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.08 KB | None | 0 0
  1. Import-Module dbatools
  2. Set-StrictMode -Version 2
  3.  
  4. function Get-InsecureCredential {
  5. param ($Username, $Password)
  6. Write-Debug "Get-InsecureCredential."
  7. $SecurePassword = $Password | ConvertTo-SecureString -AsPlainText -Force
  8. $Credential = New-Object System.Management.Automation.PSCredential ($Username, $SecurePassword)
  9. return $Credential
  10. }
  11. function Get-SqlServerCollations {
  12. param ($Filter)
  13. $Collations = @(
  14. "SQL_Latin1_General_Cp437_CS_AS_KI_WI",
  15. "SQL_Latin1_General_Cp437_CI_AS_KI_WI",
  16. "SQL_Latin1_General_Pref_Cp437_CI_AS_KI_WI",
  17. "SQL_Latin1_General_Cp437_CI_AI_KI_WI",
  18. "SQL_Latin1_General_Cp437_BIN",
  19. "SQL_Latin1_General_Cp850_BIN",
  20. "SQL_Latin1_General_Cp850_CS_AS_KI_WI",
  21. "SQL_Latin1_General_Cp850_CI_AS_KI_WI",
  22. "SQL_Latin1_General_Cp850_CI_AI_KI_WI",
  23. "SQL_Latin1_General_Pref_Cp850_CI_AS_KI_WI",
  24. "SQL_1xCompat_Cp850_CI_AS_KI_WI",
  25. "SQL_Latin1_General_Cp1_CS_AS_KI_WI",
  26. "SQL_Latin1_General_Cp1_CI_AS_KI_WI",
  27. "SQL_Latin1_General_Pref_Cp1_CI_AS_KI_WI",
  28. "SQL_Latin1_General_Cp1_CI_AI_KI_WI",
  29. "SQL_AltDiction_Cp850_CS_AS_KI_WI",
  30. "SQL_AltDiction_Pref_Cp850_CI_AS_KI_WI",
  31. "SQL_AltDiction_Cp850_CI_AI_KI_WI",
  32. "SQL_Scandainavian_Pref_Cp850_CI_AS_KI_WI",
  33. "SQL_Scandainavian_Cp850_CS_AS_KI_WI",
  34. "SQL_Scandainavian_Cp850_CI_AS_KI_WI",
  35. "SQL_AltDiction_Cp850_CI_AS_KI_WI",
  36. "SQL_Latin1_General_1250_BIN",
  37. "SQL_Latin1_General_Cp1250_CS_AS_KI_WI",
  38. "SQL_Latin1_General_Cp1250_CI_AS_KI_WI",
  39. "SQL_Czech_Cp1250_CS_AS_KI_WI",
  40. "SQL_Czech_Cp1250_CI_AS_KI_WI",
  41. "SQL_Hungarian_Cp1250_CS_AS_KI_WI",
  42. "SQL_Hungarian_Cp1250_CI_AS_KI_WI",
  43. "SQL_Polish_Cp1250_CS_AS_KI_WI",
  44. "SQL_Polish_Cp1250_CI_AS_KI_WI",
  45. "SQL_Romanian_Cp1250_CS_AS_KI_WI",
  46. "SQL_Romanian_Cp1250_CI_AS_KI_WI",
  47. "SQL_Croatian_Cp1250_CS_AS_KI_WI",
  48. "SQL_Croatian_Cp1250_CI_AS_KI_WI",
  49. "SQL_Slovak_Cp1250_CS_AS_KI_WI",
  50. "SQL_Slovak_Cp1250_CI_AS_KI_WI",
  51. "SQL_Slovenian_Cp1250_CS_AS_KI_WI",
  52. "SQL_Slovenian_Cp1250_CI_AS_KI_WI",
  53. "SQL_Latin1_General_1251_BIN",
  54. "SQL_Latin1_General_Cp1251_CS_AS_KI_WI",
  55. "SQL_Latin1_General_Cp1251_CI_AS_KI_WI",
  56. "SQL_Ukrainian_Cp1251_CS_AS_KI_WI",
  57. "SQL_Ukrainian_Cp1251_CI_AS_KI_WI",
  58. "SQL_Latin1_General_1253_BIN",
  59. "SQL_Latin1_General_Cp1253_CS_AS_KI_WI",
  60. "SQL_Latin1_General_Cp1253_CI_AS_KI_WI",
  61. "SQL_Latin1_General_Cp1253_CI_AS_KI_WI",
  62. "SQL_Latin1_General_Cp1253_CI_AI_KI_WI",
  63. "SQL_Latin1_General_1254_BIN",
  64. "SQL_Latin1_General_Cp1254_CS_AS_KI_WI",
  65. "SQL_Latin1_General_Cp1254_CI_AS_KI_WI",
  66. "SQL_Latin1_General_1255_BIN",
  67. "SQL_Latin1_General_Cp1255_CS_AS_KI_WI",
  68. "SQL_Latin1_General_Cp1255_CI_AS_KI_WI",
  69. "SQL_Latin1_General_1256_BIN",
  70. "SQL_Latin1_General_Cp1256_CS_AS_KI_WI",
  71. "SQL_Latin1_General_Cp1256_CI_AS_KI_WI",
  72. "SQL_Latin1_General_1257_BIN",
  73. "SQL_Latin1_General_Cp1257_CS_AS_KI_WI",
  74. "SQL_Latin1_General_Cp1257_CI_AS_KI_WI",
  75. "SQL_Estonian_Cp1257_CS_AS_KI_WI",
  76. "SQL_Estonian_Cp1257_CI_AS_KI_WI",
  77. "SQL_Latvian_Cp1257_CS_AS_KI_WI",
  78. "SQL_Latvian_Cp1257_CI_AS_KI_WI",
  79. "SQL_Lithuanian_Cp1257_CS_AS_KI_WI",
  80. "SQL_Lithuanian_Cp1257_CI_AS_KI_WI",
  81. "SQL_Danish_Pref_Cp1_CI_AS_KI_WI",
  82. "SQL_SwedishPhone_Pref_Cp1_CI_AS_KI_WI",
  83. "SQL_SwedishStd_Pref_Cp1_CI_AS_KI_WI",
  84. "SQL_Icelandic_Pref_Cp1_CI_AS_KI_WI")
  85.  
  86. if ($Filter){
  87. return $Collations | where { $_ -like "*$($Filter)*"}
  88. }
  89. else {
  90. return $Collations
  91. }
  92. }
  93.  
  94. function Update-Collation {
  95. param (
  96. [Parameter(Mandatory=$true)]
  97. [Microsoft.SqlServer.Management.Smo.Server]$SqlConnection,
  98. [Parameter(Mandatory=$true)]
  99. [string]$Database,
  100. [Parameter(Mandatory=$true)]
  101. [string]$Collation,
  102. [System.Collections.Generic.List[String]]$Tables
  103. )
  104. $TableList = @()
  105. if ($Tables){
  106. $TableList = ($SqlConnection.Databases[$Database].Tables | Where-Object {$_.Name -in $Tables})
  107. }
  108. else {
  109. $TableList = ($SqlConnection.Databases[$Database].Tables)
  110. }
  111.  
  112. foreach ($Table in $TableList){
  113. foreach ($Column in $Table.Columns){
  114. Write-Debug "
  115. Server: $($SqlConnection.Name)
  116. Database: $($Database)
  117. Table: $($Table.Name)
  118. Column: $($Column.Name)
  119. Source Collation: $($Column.Collation)
  120. Destination Collation: $($Collation)"
  121.  
  122. $Column.Collation = $Collation
  123. try {
  124. $Column.Alter()
  125. }
  126. catch [System.Management.Automation.MethodInvocationException] {
  127. if ($Error[0].Exception -like "*Alter failed for Column*$Collation*"){
  128. Write-Output "$($Database).$($Table.Name).$($Column.Name) cannot be altered to $Collation, please perform this manually."
  129. }
  130. }
  131. catch {
  132. $Error[0] | select * | fl
  133. }
  134. }
  135. }
  136. }
  137.  
  138.  
  139. $SqlInstance = ""
  140. $DatabaseName = ""
  141. $Password = ''
  142. $Username = ''
  143. $Tables = "", ""
  144. $InsecureCredential = Get-InsecureCredential -Username $Username -Password $Password
  145. $Collation = Get-SqlServerCollations -Filter "Cp437_CS_A"
  146. $ErrorActionPreference="Stop"
  147. $Server = Connect-DbaInstance -SqlInstance $SqlInstance -Credential $InsecureCredential
  148. Update-Collation -SqlConnection $Server -Database $DatabaseName -Collation $Collation
Add Comment
Please, Sign In to add comment