anchor.diff:  
   // https://msdn.microsoft.com/en-us/library/ms175972.aspx
   with_expression
  -    : WITH (XMLNAMESPACES ',')? common_table_expression (',' common_table_expression)*
  -    | WITH BLOCKING_HIERARCHY ('(' full_column_name_list ')')? AS '(' select_statement ')'
  +    : WITH ctes+=common_table_expression (',' ctes+=common_table_expression)*
       ;
   
   common_table_expression
  -    : expression_name=id ('(' column_name_list ')')? AS '(' select_statement ')'
  +    : expression_name=id ('(' columns=column_name_list ')')? AS '(' cte_query=select_statement ')'
       ;
   
   update_elem
  +    : LOCAL_ID '=' full_column_name ('=' | assignment_operator) expression //Combined variable and column update
  +    | (full_column_name | LOCAL_ID) ('=' | assignment_operator) expression
  +    | udt_column_name=id '.' method_name=id '(' expression_list ')'
  +    //| full_column_name '.' WRITE (expression, )
  +    ;
  +
  +update_elem_merge
       : (full_column_name | LOCAL_ID) ('=' | assignment_operator) expression
       | udt_column_name=id '.' method_name=id '(' expression_list ')'
       //| full_column_name '.' WRITE (expression, )
       ;
   
  -// https://msdn.microsoft.com/en-us/library/ms173545.aspx
  -search_condition_list
  -    : search_condition (',' search_condition)*
  -    ;
  -
   search_condition
  -    : search_condition_and (OR search_condition_and)*
  -    ;
  -
  -search_condition_and
  -    : search_condition_not (AND search_condition_not)*
  -    ;
  -
  -search_condition_not
  -    : NOT? predicate
  -    ;
  -
  +    : pred+=predicate_br (log=(OR | AND) pred+=predicate_br)*
  +    ;
  +
  +predicate_br
  +    : NOT* predicate
  +    | NOT* '(' search_condition ')'
  +    ;
  +    
   predicate
       : EXISTS '(' subquery ')'
  +    | freetext_predicate
       | expression comparison_operator expression
       | expression comparison_operator (ALL | SOME | ANY) '(' subquery ')'
  -    | expression NOT? BETWEEN expression AND expression
  -    | expression NOT? IN '(' (subquery | expression_list) ')'
  -    | expression NOT? LIKE expression (ESCAPE expression)?
  +    | expression NOT* BETWEEN expression AND expression
  +    | expression NOT* IN '(' (subquery | expression_list) ')'
  +    | expression NOT* LIKE expression (ESCAPE expression)?
       | expression IS null_notnull
  -    | '(' search_condition ')'
       ;
   
   // Changed union rule to sql_union to avoid union construct with C++ target.  Issue reported by person who generates into C++.  This individual reports change causes generated code to work
   
   query_expression
  -    : (query_specification | '(' query_expression ')') sql_union*
  +    : (query_specification | '(' query_expression ')')
  +    |  query_specification order_by_clause? unions+=sql_union+ //if using top, order by can be on the "top" side of union :/
       ;
   
   sql_union
  -    : (UNION ALL? | EXCEPT | INTERSECT) (query_specification | ('(' query_expression ')'))
  +    : (UNION ALL? | EXCEPT | INTERSECT) (spec=query_specification | ('(' op=query_expression ')'))
       ;
   
   // https://msdn.microsoft.com/en-us/library/ms176104.aspx
   query_specification
  -    : SELECT (ALL | DISTINCT)? top_clause?
  -      select_list
  +    : SELECT allOrDistinct=(ALL | DISTINCT)? top=top_clause?
  +      columns=select_list
         // https://msdn.microsoft.com/en-us/library/ms188029.aspx
  -      (INTO table_name)?
  -      (FROM table_sources)?
  +      (INTO into=table_name)?
  +      (FROM from=table_sources)?
         (WHERE where=search_condition)?
         // https://msdn.microsoft.com/en-us/library/ms177673.aspx
  -      (GROUP BY (ALL)? group_by_item (',' group_by_item)*)?
  +      (GROUP BY (groupByAll=ALL)? groupBys+=group_by_item (',' groupBys+=group_by_item)*)?
         (HAVING having=search_condition)?
       ;
   
  
positive.code: 
  // https://msdn.microsoft.com/en-us/library/ms188332.aspx
  execute_statement
      : EXECUTE execute_body
      ;
  
  execute_body
      : (return_status=LOCAL_ID '=')? (func_proc_name_server_database_schema | expression) (execute_statement_arg (',' execute_statement_arg)*)? ';'?
      | '(' execute_var_string ('+' execute_var_string)* ')' (AS? (LOGIN | USER) '=' STRING)? ';'?
      ;
  
  execute_statement_arg
      : (parameter=LOCAL_ID '=')? ((constant_LOCAL_ID | id) (OUTPUT | OUT)? | DEFAULT | NULL)
      ;
  
  execute_var_string
  
negative.code: 
  // https://msdn.microsoft.com/en-us/library/ms173454.aspx
  aggregate_windowed_function
      : agg_func=(AVG | MAX | MIN | SUM | STDEV | STDEVP | VAR | VARP)
        '(' all_distinct_expression ')' over_clause?
      | cnt=(COUNT | COUNT_BIG)
        '(' ('*' | all_distinct_expression) ')' over_clause?
      | CHECKSUM_AGG '(' all_distinct_expression ')'
      | GROUPING '(' expression ')'
  