@@ -95,6 +95,7 @@ static async Task<int> Main(string[] args)
9595 Console . WriteLine ( " -h, --help Show this help message" ) ;
9696 Console . WriteLine ( " --reinstall Drop existing database and perform clean install" ) ;
9797 Console . WriteLine ( " --reset-schedule Reset collection schedule to recommended defaults" ) ;
98+ Console . WriteLine ( " --preserve-jobs Keep existing SQL Agent jobs (owner, schedule, notifications)" ) ;
9899 Console . WriteLine ( " --encrypt=<level> Connection encryption: mandatory (default), optional, strict" ) ;
99100 Console . WriteLine ( " --trust-cert Trust server certificate without validation" ) ;
100101 Console . WriteLine ( ) ;
@@ -115,6 +116,7 @@ static async Task<int> Main(string[] args)
115116 bool automatedMode = args . Length > 0 ;
116117 bool reinstallMode = args . Any ( a => a . Equals ( "--reinstall" , StringComparison . OrdinalIgnoreCase ) ) ;
117118 bool resetSchedule = args . Any ( a => a . Equals ( "--reset-schedule" , StringComparison . OrdinalIgnoreCase ) ) ;
119+ bool preserveJobs = args . Any ( a => a . Equals ( "--preserve-jobs" , StringComparison . OrdinalIgnoreCase ) ) ;
118120 bool trustCert = args . Any ( a => a . Equals ( "--trust-cert" , StringComparison . OrdinalIgnoreCase ) ) ;
119121
120122 /*Parse encryption option (default: Mandatory)*/
@@ -135,6 +137,7 @@ static async Task<int> Main(string[] args)
135137 var filteredArgs = args
136138 . Where ( a => ! a . Equals ( "--reinstall" , StringComparison . OrdinalIgnoreCase ) )
137139 . Where ( a => ! a . Equals ( "--reset-schedule" , StringComparison . OrdinalIgnoreCase ) )
140+ . Where ( a => ! a . Equals ( "--preserve-jobs" , StringComparison . OrdinalIgnoreCase ) )
138141 . Where ( a => ! a . Equals ( "--trust-cert" , StringComparison . OrdinalIgnoreCase ) )
139142 . Where ( a => ! a . StartsWith ( "--encrypt=" , StringComparison . OrdinalIgnoreCase ) )
140143 . ToArray ( ) ;
@@ -653,6 +656,16 @@ INSERT...WHERE NOT EXISTS re-populates with current recommended values
653656 Console . Write ( "(resetting schedule) " ) ;
654657 }
655658
659+ /*
660+ Preserve existing SQL Agent jobs if requested — flip the T-SQL
661+ variable so existing jobs are left untouched during upgrade
662+ */
663+ if ( preserveJobs && fileName . StartsWith ( "45_" , StringComparison . Ordinal ) )
664+ {
665+ sqlContent = sqlContent . Replace ( "@preserve_jobs bit = 0" , "@preserve_jobs bit = 1" ) ;
666+ Console . Write ( "(preserving existing jobs) " ) ;
667+ }
668+
656669 /*
657670 Remove SQLCMD directives (:r includes) as we're executing files directly
658671 */
0 commit comments