@@ -2343,11 +2343,16 @@ impl fmt::Display for BeginEndStatements {
23432343 end_token : AttachedToken ( end_token) ,
23442344 } = self ;
23452345
2346- write ! ( f, "{begin_token} " ) ?;
2346+ if begin_token. token != Token :: EOF {
2347+ write ! ( f, "{begin_token} " ) ?;
2348+ }
23472349 if !statements. is_empty ( ) {
23482350 format_statement_list ( f, statements) ?;
23492351 }
2350- write ! ( f, " {end_token}" )
2352+ if end_token. token != Token :: EOF {
2353+ write ! ( f, " {end_token}" ) ?;
2354+ }
2355+ Ok ( ( ) )
23512356 }
23522357}
23532358
@@ -3653,6 +3658,7 @@ pub enum Statement {
36533658 /// ```
36543659 ///
36553660 /// Postgres: <https://www.postgresql.org/docs/current/sql-createtrigger.html>
3661+ /// SQL Server: <https://learn.microsoft.com/en-us/sql/t-sql/statements/create-trigger-transact-sql>
36563662 CreateTrigger {
36573663 /// The `OR REPLACE` clause is used to re-create the trigger if it already exists.
36583664 ///
@@ -3714,7 +3720,9 @@ pub enum Statement {
37143720 /// Triggering conditions
37153721 condition : Option < Expr > ,
37163722 /// Execute logic block
3717- exec_body : TriggerExecBody ,
3723+ exec_body : Option < TriggerExecBody > ,
3724+ /// For SQL dialects with statement(s) for a body
3725+ statements : Option < BeginEndStatements > ,
37183726 /// The characteristic of the trigger, which include whether the trigger is `DEFERRABLE`, `INITIALLY DEFERRED`, or `INITIALLY IMMEDIATE`,
37193727 characteristics : Option < ConstraintCharacteristics > ,
37203728 } ,
@@ -4520,19 +4528,29 @@ impl fmt::Display for Statement {
45204528 condition,
45214529 include_each,
45224530 exec_body,
4531+ statements,
45234532 characteristics,
45244533 } => {
45254534 write ! (
45264535 f,
4527- "CREATE {or_replace}{is_constraint}TRIGGER {name} {period} " ,
4536+ "CREATE {or_replace}{is_constraint}TRIGGER {name} " ,
45284537 or_replace = if * or_replace { "OR REPLACE " } else { "" } ,
45294538 is_constraint = if * is_constraint { "CONSTRAINT " } else { "" } ,
45304539 ) ?;
45314540
4532- if !events. is_empty ( ) {
4533- write ! ( f, " {}" , display_separated( events, " OR " ) ) ?;
4541+ if exec_body. is_some ( ) {
4542+ write ! ( f, "{period}" ) ?;
4543+ if !events. is_empty ( ) {
4544+ write ! ( f, " {}" , display_separated( events, " OR " ) ) ?;
4545+ }
4546+ write ! ( f, " ON {table_name}" ) ?;
4547+ } else {
4548+ write ! ( f, "ON {table_name}" ) ?;
4549+ write ! ( f, " {period}" ) ?;
4550+ if !events. is_empty ( ) {
4551+ write ! ( f, " {}" , display_separated( events, ", " ) ) ?;
4552+ }
45344553 }
4535- write ! ( f, " ON {table_name}" ) ?;
45364554
45374555 if let Some ( referenced_table_name) = referenced_table_name {
45384556 write ! ( f, " FROM {referenced_table_name}" ) ?;
@@ -4548,13 +4566,19 @@ impl fmt::Display for Statement {
45484566
45494567 if * include_each {
45504568 write ! ( f, " FOR EACH {trigger_object}" ) ?;
4551- } else {
4569+ } else if exec_body . is_some ( ) {
45524570 write ! ( f, " FOR {trigger_object}" ) ?;
45534571 }
45544572 if let Some ( condition) = condition {
45554573 write ! ( f, " WHEN {condition}" ) ?;
45564574 }
4557- write ! ( f, " EXECUTE {exec_body}" )
4575+ if let Some ( exec_body) = exec_body {
4576+ write ! ( f, " EXECUTE {exec_body}" ) ?;
4577+ }
4578+ if let Some ( statements) = statements {
4579+ write ! ( f, " AS {statements}" ) ?;
4580+ }
4581+ Ok ( ( ) )
45584582 }
45594583 Statement :: DropTrigger {
45604584 if_exists,
0 commit comments