diff --git a/CreateDB_RunSQLScript.txt b/CreateDB_RunSQLScript.txt new file mode 100644 index 0000000..0c9c8a6 --- /dev/null +++ b/CreateDB_RunSQLScript.txt @@ -0,0 +1,139 @@ +$server = "CPMIN-DL343" +$database = "Test_database" +$folder = "C:\Users\gunjanr\Downloads\Telegram Desktop\DB" +$logFile = "C:\Users\gunjanr\Documents\deployment_log.txt" + +Import-Module SqlServer -ErrorAction Stop + +# Reset log file +if (Test-Path $logFile) { Remove-Item $logFile } + +# Create DB if not exists +Invoke-Sqlcmd -ServerInstance $server -Database "master" ` +-Query "IF DB_ID('$database') IS NULL CREATE DATABASE [$database]" ` +-TrustServerCertificate + +Write-Host "Database Ready: $database" -ForegroundColor Green + +# Get SQL files +$files = Get-ChildItem -Path $folder -Recurse -Filter *.sql + +# Sort files (execution order) +$sortedFiles = $files | Sort-Object { + $path = $_.FullName.ToLower() + + if ($path -like "*\tables\*") {1} + elseif ($path -like "*\constraints\*primary*") {2} + elseif ($path -like "*\indexes\*") {3} + elseif ($path -like "*\constraints\*fk*") {4} + elseif ($path -like "*\constraints\*") {5} + elseif ($path -like "*\functions\*") {6} + elseif ($path -like "*\procedures\*") {7} + elseif ($path -like "*\views\*") {8} + elseif ($path -like "*\triggers\*") {9} + else {10} +}, Name + +Write-Host "Total files found: $($sortedFiles.Count)" -ForegroundColor Yellow + +# Counters +$successCount = 0 +$skipCount = 0 +$errorCount = 0 + +# Execute files +foreach ($file in $sortedFiles) { + + Write-Host "Running: $($file.FullName)" -ForegroundColor Cyan + + try { + $content = Get-Content $file.FullName -Raw + + # Extract SET statements + $setStatements = @() + if ($content -match "(?i)SET\s+ANSI_NULLS\s+ON") { + $setStatements += "SET ANSI_NULLS ON" + } + if ($content -match "(?i)SET\s+QUOTED_IDENTIFIER\s+ON") { + $setStatements += "SET QUOTED_IDENTIFIER ON" + } + + # Remove SET lines + $cleanContent = $content -replace "(?im)^\s*SET\s+ANSI_NULLS\s+ON\s*$", "" + $cleanContent = $cleanContent -replace "(?im)^\s*SET\s+QUOTED_IDENTIFIER\s+ON\s*$", "" + + # Run SET statements first + foreach ($stmt in $setStatements) { + Invoke-Sqlcmd ` + -ServerInstance $server ` + -Database $database ` + -Query $stmt ` + -TrustServerCertificate ` + -ErrorAction Stop + } + + # Split by GO + $batches = $cleanContent -split "(?im)^\s*GO\s*$" + + foreach ($batch in $batches) { + + $sql = $batch.Trim() + if ([string]::IsNullOrWhiteSpace($sql)) { continue } + + try { + Invoke-Sqlcmd ` + -ServerInstance $server ` + -Database $database ` + -Query $sql ` + -TrustServerCertificate ` + -QueryTimeout 0 ` + -ErrorAction Stop + } + catch { + $errorMessage = $_.Exception.Message + + # Skip "already exists" + if ($errorMessage -match "already exists|duplicate|exists") { + Write-Host "Skipped (Already Exists): $($file.Name)" -ForegroundColor Yellow + $skipCount++ + continue + } + + # Log real error + Write-Host "Error in batch: $($file.Name)" -ForegroundColor Red + Write-Host $errorMessage -ForegroundColor DarkRed + + Add-Content $logFile "File: $($file.FullName)" + Add-Content $logFile "Error: $errorMessage" + Add-Content $logFile "-----------------------------" + + $errorCount++ + continue + } + } + + Write-Host "Completed: $($file.Name)" -ForegroundColor Green + $successCount++ + } + catch { + $errorMessage = $_.Exception.Message + + Write-Host "Error in file: $($file.FullName)" -ForegroundColor Red + Write-Host $errorMessage -ForegroundColor DarkRed + + Add-Content $logFile "File: $($file.FullName)" + Add-Content $logFile "Error: $errorMessage" + Add-Content $logFile "-----------------------------" + + $errorCount++ + continue + } +} + +# Final Summary +Write-Host "`n===== DEPLOYMENT SUMMARY =====" -ForegroundColor Cyan +Write-Host "Successful Files : $successCount" -ForegroundColor Green +Write-Host "Skipped Files : $skipCount" -ForegroundColor Yellow +Write-Host "Failed Files : $errorCount" -ForegroundColor Red + +Write-Host "`nDeployment completed." -ForegroundColor Green \ No newline at end of file