scripts/win/docker/sql-restore-bacpac.ps1
param( [Parameter(Mandatory)] [string]$BacpacPath ) # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ # SQL BACPAC Restore — Host-based using sqlpackage # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Write-Host "" Write-Host " BACPAC File: $BacpacPath" -ForegroundColor Yellow # 🧪 Ensure sqlpackage is available $sqlPackageCmd = "sqlpackage" if (-not (Get-Command $sqlPackageCmd -ErrorAction SilentlyContinue)) { Write-Host " 'sqlpackage' not found in PATH. Please ensure it is installed and accessible." -ForegroundColor Red exit 1 } # Determine base names $baseName = [System.IO.Path]::GetFileNameWithoutExtension($BacpacPath) $proposedName = ($baseName -split '[-_]')[0] # Prompt for database name $renameOptions = @( "Use proposed: $proposedName" "Keep original: $baseName" "Propose new name..." ) $selected = $renameOptions | fzf --prompt " Choose database name for import: " --height 10 --reverse | ForEach-Object { $_.Trim() } if (-not $selected) { Write-Host " No name selected. Aborting." -ForegroundColor Red exit 1 } switch -Regex ($selected) { "^Use proposed:" { $dbName = $proposedName } "^Keep original:" { $dbName = $baseName } "^Propose new name" { $entered = Read-Host -Prompt " Enter custom database name" $dbName = if ([string]::IsNullOrWhiteSpace($entered)) { $baseName } else { $entered } } default { Write-Host " Invalid selection. Aborting." -ForegroundColor Red exit 1 } } # Load connection info from store . "$env:BORG_ROOT\config\globalfn.ps1" $server = GetBorgStoreValue -Chapter docker -Key sqlinstance $username = GetBorgStoreValue -Chapter docker -Key sqluser $password = GetBorgStoreValue -Chapter docker -Key sqlpassword if (-not $server -or -not $username -or -not $password) { Write-Host " Missing SQL connection configuration in store. Please check chapter 'docker'." -ForegroundColor Red exit 1 } $connectionString = "Server=$server;Database=$dbName;User Id=$username;Password=$password;TrustServerCertificate=True" # Execute import Write-Host "" Write-Host " Importing '$dbName' using sqlpackage.exe..." -ForegroundColor Cyan & $sqlPackageCmd /Action:Import /SourceFile:"$BacpacPath" /TargetConnectionString:"$connectionString" if ($LASTEXITCODE -ne 0) { Write-Host " Import failed. Please check the output above." -ForegroundColor Red exit 1 } Write-Host "" Write-Host " Database '$dbName' imported successfully!" -ForegroundColor Green |