PDC_REPORT_CreazioneDB/script/createTableFromSelect.ps1
2025-06-26 12:51:32 +02:00

219 lines
13 KiB
PowerShell
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Importa configurazione
. "$PSScriptRoot\conf.ps1"
$scriptName = $MyInvocation.MyCommand.Name
$logFile = Join-Path $env:logDir "${scriptName}.log"
"start" | Out-File -FilePath $logFile
# Imposta il percorso di output nella cartella sql
$OutputPath = Join-Path $env:workdir "sql\tables_from_select"
# Verifica che la directory di output esista, altrimenti la crea
if (-not (Test-Path -Path $OutputPath)) {
New-Item -ItemType Directory -Path $OutputPath | Out-Null
}
try {
# Carica l'assembly System.Data
Add-Type -AssemblyName System.Data
# Definizione manuale dell'elenco delle tabelle da elaborare
# Formato: ogni elemento è un oggetto con proprietà DbName, SchemaName e TableName
$tables = @(
@{ DbName = "CatalogoProdotti"; SchemaName = "dbo"; TableName = "AnAlberatura" },
@{ DbName = "CatalogoProdotti"; SchemaName = "dbo"; TableName = "AnCompagnia" },
@{ DbName = "CatalogoProdotti"; SchemaName = "dbo"; TableName = "AnEmittente" },
@{ DbName = "CatalogoProdotti"; SchemaName = "dbo"; TableName = "AssetClass" },
@{ DbName = "CatalogoProdotti"; SchemaName = "dbo"; TableName = "CatalogoProdotti" },
@{ DbName = "CatalogoProdotti"; SchemaName = "dbo"; TableName = "CATINAREA" },
@{ DbName = "CatalogoProdotti"; SchemaName = "dbo"; TableName = "Mappatura" },
@{ DbName = "CatalogoProdotti"; SchemaName = "dbo"; TableName = "NeedArea" },
@{ DbName = "CatalogoProdotti"; SchemaName = "dbo"; TableName = "ProdottiNucleo" },
@{ DbName = "CatalogoProdotti"; SchemaName = "dbo"; TableName = "TB_ESG_ANAG_STRUM" },
@{ DbName = "CatalogoProdotti"; SchemaName = "dbo"; TableName = "VDivPtfConCatalogo" },
@{ DbName = "consulenzaEvoluta"; SchemaName = "dbo"; TableName = "Parentela" },
@{ DbName = "consulenzaUnica"; SchemaName = "dbo"; TableName = "anagrafica_promotori" },
@{ DbName = "consulenzaUnica"; SchemaName = "dbo"; TableName = "Area" },
@{ DbName = "consulenzaUnica"; SchemaName = "dbo"; TableName = "AreaModello" },
@{ DbName = "consulenzaUnica"; SchemaName = "dbo"; TableName = "Cliente" },
@{ DbName = "consulenzaUnica"; SchemaName = "dbo"; TableName = "ClientePB" },
@{ DbName = "consulenzaUnica"; SchemaName = "dbo"; TableName = "Cointestatari" },
@{ DbName = "consulenzaUnica"; SchemaName = "dbo"; TableName = "CointestatariDettaglioDiritto" },
@{ DbName = "consulenzaUnica"; SchemaName = "dbo"; TableName = "Contratto" },
@{ DbName = "consulenzaUnica"; SchemaName = "dbo"; TableName = "DComune" },
@{ DbName = "consulenzaUnica"; SchemaName = "dbo"; TableName = "Delegato" },
@{ DbName = "consulenzaUnica"; SchemaName = "dbo"; TableName = "dettaglioClientePB" },
@{ DbName = "consulenzaUnica"; SchemaName = "dbo"; TableName = "DettaglioOperazione" },
@{ DbName = "consulenzaUnica"; SchemaName = "dbo"; TableName = "DettaglioPosizionePortafoglio" },
@{ DbName = "consulenzaUnica"; SchemaName = "dbo"; TableName = "DettAltriProdotti" },
@{ DbName = "consulenzaUnica"; SchemaName = "dbo"; TableName = "DettImmobiliare" },
@{ DbName = "consulenzaUnica"; SchemaName = "dbo"; TableName = "DettPatrAziendale" },
@{ DbName = "consulenzaUnica"; SchemaName = "dbo"; TableName = "DettProdottiTerzi" },
@{ DbName = "consulenzaUnica"; SchemaName = "dbo"; TableName = "dfinalita" },
@{ DbName = "consulenzaUnica"; SchemaName = "dbo"; TableName = "DistribuzionePtfModello_Tattici" },
@{ DbName = "consulenzaUnica"; SchemaName = "dbo"; TableName = "Dnazione" },
@{ DbName = "consulenzaUnica"; SchemaName = "dbo"; TableName = "DNazioneEstera" },
@{ DbName = "consulenzaUnica"; SchemaName = "dbo"; TableName = "dprofilo" },
@{ DbName = "consulenzaUnica"; SchemaName = "dbo"; TableName = "dtipoimmobile" },
@{ DbName = "consulenzaUnica"; SchemaName = "dbo"; TableName = "eventiCliente" },
@{ DbName = "consulenzaUnica"; SchemaName = "dbo"; TableName = "GradoParentela" },
@{ DbName = "consulenzaUnica"; SchemaName = "dbo"; TableName = "MappaturaPT" },
@{ DbName = "consulenzaUnica"; SchemaName = "dbo"; TableName = "param" },
@{ DbName = "consulenzaUnica"; SchemaName = "dbo"; TableName = "PatrimonioImmobiliareStaging" },
@{ DbName = "consulenzaUnica"; SchemaName = "dbo"; TableName = "PatrimonioTerzi" },
@{ DbName = "consulenzaUnica"; SchemaName = "dbo"; TableName = "Pianificazione" },
@{ DbName = "consulenzaUnica"; SchemaName = "dbo"; TableName = "PiramideModello" },
@{ DbName = "consulenzaUnica"; SchemaName = "dbo"; TableName = "portafogliomodello" },
@{ DbName = "consulenzaUnica"; SchemaName = "dbo"; TableName = "PosizioniPortafoglio" },
@{ DbName = "consulenzaUnica"; SchemaName = "dbo"; TableName = "PosizioniProposta" },
@{ DbName = "consulenzaUnica"; SchemaName = "dbo"; TableName = "PRAM_NOBPREZ" },
@{ DbName = "consulenzaUnica"; SchemaName = "dbo"; TableName = "ProgettiPiramideModello" },
@{ DbName = "consulenzaUnica"; SchemaName = "dbo"; TableName = "Progetto" },
@{ DbName = "consulenzaUnica"; SchemaName = "dbo"; TableName = "PromotoreBancario" },
@{ DbName = "consulenzaUnica"; SchemaName = "dbo"; TableName = "Proposta" },
@{ DbName = "consulenzaUnica"; SchemaName = "dbo"; TableName = "REP_ASSET_1_E_2_ORDINATE" },
@{ DbName = "consulenzaUnica"; SchemaName = "dbo"; TableName = "REP_S4_S5_S13_TRAD_UNTIL_LIV3" },
@{ DbName = "consulenzaUnica"; SchemaName = "dbo"; TableName = "REP_S80_EVOL_STAMPA_C6" },
@{ DbName = "consulenzaUnica"; SchemaName = "dbo"; TableName = "Robo_ProgettoRobo" },
@{ DbName = "consulenzaUnica"; SchemaName = "dbo"; TableName = "token" },
@{ DbName = "consulenzaUnica"; SchemaName = "dbo"; TableName = "v_servizi_aggiuntivi" },
@{ DbName = "consulenzaUnica"; SchemaName = "dbo"; TableName = "VCONTRATTIFINEAVANZATO" },
@{ DbName = "consulenzaUnica"; SchemaName = "dbo"; TableName = "vinfocliente" },
@{ DbName = "consulenzaUnica"; SchemaName = "dbo"; TableName = "W6ASSETPERC" },
@{ DbName = "consulenzaUnicaFL"; SchemaName = "dbo"; TableName = "CaricamentoMassivo" },
@{ DbName = "consulenzaUnicaFL"; SchemaName = "dbo"; TableName = "CaricamentoMassivoC6SC" },
@{ DbName = "consulenzaUnicaFL"; SchemaName = "dbo"; TableName = "CBS_DbContrattoBase" },
@{ DbName = "consulenzaUnicaFL"; SchemaName = "dbo"; TableName = "CBS_DbContrattoSei" },
@{ DbName = "consulenzaUnicaFL"; SchemaName = "dbo"; TableName = "CBS_DbVariazFreqContrSei" },
@{ DbName = "consulenzaUnicaFL"; SchemaName = "dbo"; TableName = "CBS_DbVariazStmrepContrSei" },
@{ DbName = "consulenzaUnicaFL"; SchemaName = "dbo"; TableName = "CBS_HistDatiIngresso" },
@{ DbName = "consulenzaUnicaFL"; SchemaName = "dbo"; TableName = "CBS_Scarti" },
@{ DbName = "consulenzaUnicaFL"; SchemaName = "dbo"; TableName = "CBS_STAMPAREPORT" },
@{ DbName = "consulenzaUnicaFL"; SchemaName = "dbo"; TableName = "CBS_STAMPAREPORT_TEST" },
@{ DbName = "consulenzaUnicafl"; SchemaName = "dbo"; TableName = "ClienteCambioReteContratto" },
@{ DbName = "consulenzaUnicaFL"; SchemaName = "dbo"; TableName = "Immobiliare_Cliente" },
@{ DbName = "consulenzaUnicafl"; SchemaName = "dbo"; TableName = "Immobiliare_RichiesteMonitoraggioCatastoCliente" },
@{ DbName = "consulenzaUnicaFL"; SchemaName = "dbo"; TableName = "logBatchGenerale" },
@{ DbName = "consulenzaUnicaFL"; SchemaName = "dbo"; TableName = "RDR_VALUTE_DB_DTGIORNALIERI" },
@{ DbName = "consulenzaUnicaFL"; SchemaName = "dbo"; TableName = "RICODIF_CF_PIVA" },
@{ DbName = "consulenzaUnicaFL"; SchemaName = "dbo"; TableName = "Semaforo" },
@{ DbName = "SEIAlertDW"; SchemaName = "dbo"; TableName = "Vis_Mifid_Report" }
)
Write-Host "Trovate $($tables.Count) tabelle"
"Trovate $($tables.Count) tabelle" | Out-File -FilePath $logFile -Append
# Funzione per formattare il nome del file
function Format-FileName {
param([string]$name)
# Sostituisce caratteri non validi con underscore
$invalidChars = [IO.Path]::GetInvalidFileNameChars()
$invalidChars += '[', ']', ' ', '(', ')', '{', '}', '´', '`', '''', '"'
$result = $name
foreach ($char in $invalidChars) {
$result = $result.Replace($char, '_')
}
return $result
}
# Per ogni tabella
foreach ($table in $tables) {
$dbName = $table.dbName
$schemaName = $table.SchemaName
$tableName = $table.TableName
$formattedDbName = Format-FileName $dbName
$formattedSchemaName = Format-FileName $schemaName
$formattedTableName = Format-FileName $tableName
Write-Host "Elaboro ${dbName}.${schemaName}.${tableName}..."
"Elaboro ${dbName}.${schemaName}.${tableName}..." | Out-File -FilePath $logFile -Append
# Query per ottenere la struttura della tabella basata su SELECT *
$columnQuery = @"
SELECT
c.name as ColumnName,
t.name as DataType,
c.max_length,
c.precision,
c.scale,
c.is_nullable,
CASE
WHEN t.name IN ('char', 'varchar', 'nchar', 'nvarchar')
THEN t.name + '(' +
CASE
WHEN c.max_length = -1 THEN 'MAX'
WHEN t.name LIKE 'n%' THEN CAST(c.max_length/2 AS VARCHAR)
ELSE CAST(c.max_length AS VARCHAR)
END + ')'
WHEN t.name IN ('decimal', 'numeric')
THEN t.name + '(' + CAST(c.[precision] AS VARCHAR) + ',' + CAST(c.[scale] AS VARCHAR) + ')'
ELSE t.name
END as FullDataType
FROM [$env:dbHostInput].[$dbName].sys.columns c
INNER JOIN [$env:dbHostInput].[$dbName].sys.types t ON c.user_type_id = t.user_type_id
INNER JOIN [$env:dbHostInput].[$dbName].sys.tables tbl ON c.object_id = tbl.object_id
WHERE SCHEMA_NAME(tbl.schema_id) = '$schemaName'
AND tbl.name = '$tableName'
ORDER BY c.column_id
"@
# Ottieni la struttura delle colonne
$connectionString = "Server=$($env:dbHostInput);Database=$($env:dbNameInput);User Id=$($env:dbUserInput);Password=$($env:dbPasswordInput);TrustServerCertificate=True"
$connection = New-Object System.Data.SqlClient.SqlConnection($connectionString)
$command = New-Object System.Data.SqlClient.SqlCommand($columnQuery, $connection)
$adapter = New-Object System.Data.SqlClient.SqlDataAdapter($command)
$dataset = New-Object System.Data.DataSet
$adapter.Fill($dataset) | Out-Null
$columns = $dataset.Tables[0]
# Costruisci la CREATE TABLE
$createTableScript = "CREATE TABLE [$dbName].[$schemaName].[$tableName] (`n"
$columnDefinitions = @()
foreach ($column in $columns) {
$nullability = if ($column.is_nullable) { "NULL" } else { "NOT NULL" }
$columnDefinitions += " [$($column.ColumnName)] $($column.FullDataType) $nullability"
}
$createTableScript += $columnDefinitions -join ",`n"
$createTableScript += "`n)"
# Crea il nome del file
$fileName = Join-Path $OutputPath "${formattedDbName}_${formattedSchemaName}_${formattedTableName}.sql"
# Aggiungi la SELECT dopo la CREATE TABLE
$content = @"
$createTableScript;
GO
-- Popolamento tabella
-- INSERT INTO [$dbName].[$schemaName].[$tableName]
-- SELECT * FROM [$env:dbHostInput].[$dbName].[$schemaName].[$tableName];
-- GO
"@
try {
# Scrivi il contenuto nel file con codifica UTF8 con BOM
$utf8WithBom = New-Object System.Text.UTF8Encoding($true)
[System.IO.File]::WriteAllText($fileName, $content, $utf8WithBom)
Write-Host "Creato file per tabella: ${dbName}.${schemaName}.${tableName}" -ForegroundColor Green
"Creato file per tabella: ${dbName}.${schemaName}.${tableName}" | Out-File -FilePath $logFile -Append
}
catch {
$errorMessage = "ERRORE durante la scrittura del file per ${dbName}.${schemaName}.${tableName}: $($_.Exception.Message)"
Write-Host $errorMessage -ForegroundColor Red
$errorMessage | Out-File -FilePath $logFile -Append
}
}
Write-Host "`nGenerazione script completata con successo!"
"Generazione script completata con successo!" | Out-File -FilePath $logFile -Append
} catch {
$errorMessage = "Errore durante l'elaborazione: $_"
Write-Host $errorMessage -ForegroundColor Red
$errorMessage | Out-File -FilePath $logFile -Append
exit 1
}