anchor.diff:    | NUMBER FOLLOWING  
     | CURRENT ROW  
   ;
  +
  +alterTable:
  +	alterTableOp
  +	(alterColumn
  +	|addColumn
  +	|alterDrop
  +	|alterCheckConstraint
  +	|alterTrigger
  +	|alterTracking
  +	|alterSwitch
  +	|alterSet
  +	|alterRebuild
  +	|fileTableOption
  +	|stretchConfiguration)
  +	;
  +alterTableOp:
  +	ALTER TABLE tableName
  +	;
  +	
  +alterColumn:
  +	 ALTER COLUMN columnName   
  +    (   
  +       dataType   
  +        (
  +        	(COLLATE collationName)   
  +       		|( NULL | NOT NULL ) 
  +        	|( SPARSE )
  +        )*
  +      | ((ADD | DROP)  ( ROWGUIDCOL | PERSISTED | NOT FOR REPLICATION | SPARSE | HIDDEN_)) 
  +      | ((ADD | DROP) MASKED (WITH LEFT_PAREN FUNCTION EQ_OR_ASSIGN STRING RIGHT_PAREN )?) 
  +    )   
  +    (WITH LEFT_PAREN ONLINE EQ_OR_ASSIGN ON | OFF RIGHT_PAREN)?  
  +    ;
  +alterIndex:
  +	 ALTER INDEX indexName   
  +     typeName  REBUILD 
  +     (NONCLUSTERED? WITH LEFT_PAREN BUCKET_COUNT EQ_OR_ASSIGN NUMBER RIGHT_PAREN)?
  +    ;
  +
  +addColumn:
  +	 (WITH (CHECK | NOCHECK))?
  +	 ADD   
  +   	 (
  +   	 	(alterColumnAddOption (COMMA  alterColumnAddOption)*) 
  +      |(
  +      	(columnNameGeneratedClause COMMA periodClause)
  +        |(periodClause COMMA columnNameGeneratedClause)
  +        )
  +      )  
  +	;
  +	
  +alterColumnAddOption:
  +	  columnDefinition  
  +      | computedColumnDefinition  
  +      | tableConstraint   
  +      | columnSetDefinition
  +      | columnIndex
  +      ;
  +      
  +columnNameGeneratedClause:
  +	columnNameGenerated
  +    DEFAULT simpleExpr (WITH VALUES)? COMMA  
  +    columnNameGenerated
  +	;
  +	
  +columnNameGenerated:
  +	columnName typeName GENERATED ALWAYS AS ROW START   
  +    HIDDEN_? (NOT NULL)? (CONSTRAINT constraintName)?
  +    ;
  +    	
  +alterDrop:
  +	DROP 
  +	(
  +		alterTableDropConstraint
  +		|alterTableDropColumn
  +		|(PERIOD FOR SYSTEM_TIME)
  +	)
  +	;
  +	
  +alterTableDropConstraint:
  +	CONSTRAINT? (IF EXISTS)?  
  +	dropConstraintName (COMMA dropConstraintName)
  +	;
  +	
  +dropConstraintName:
  +	constraintName dropConstraintWithClause?
  +	;
  +
  +dropConstraintWithClause:
  +  	WITH  LEFT_PAREN dropConstraintOption ( COMMA dropConstraintOption)* RIGHT_PAREN   
  +	;
  +
  +alterTableDropColumn:
  +	COLUMN (IF EXISTS)?  
  +	columnName (COMMA columnName)*
  +	;
  +
  +dropConstraintOption:    
  +    (   
  +        (MAXDOP EQ_OR_ASSIGN NUMBER ) 
  +      | (ONLINE EQ_OR_ASSIGN ( ON | OFF ))  
  +      | (MOVE TO   
  +         ( schemaName LEFT_PAREN columnName RIGHT_PAREN | fileGroup | STRING ) ) 
  +    )
  +    ;  
  +    
  +alterTableOption:  
  +    SET LEFT_PAREN LOCK_ESCALATION EQ_OR_ASSIGN (AUTO | TABLE | DISABLE) RIGHT_PAREN  
  +	;
  +	
  +alterCheckConstraint:  
  +    WITH? (CHECK | NOCHECK) CONSTRAINT   
  +        (ALL | (constraintName (COMMA constraintName)*))  
  +	;
  +	
  +alterTrigger: 
  +	(ENABLE| DISABLE) TRIGGER   
  +        (ALL | (triggerName ( COMMA triggerName)*))  
  +	;
  +	
  +alterTracking:
  +	(ENABLE | DISABLE) CHANGE_TRACKING   
  +    (WITH LEFT_PAREN TRACK_COLUMNS_UPDATED EQ_OR_ASSIGN (ON | OFF) RIGHT_PAREN )?
  +	;
  +	
  +alterSwitch:
  +	SWITCH ( PARTITION expr )?  
  +        TO tableName   
  +        ( PARTITION expr)?  
  +        ( WITH LEFT_PAREN lowPriorityLockWait RIGHT_PAREN )?  
  +	;
  +alterSet:	
  +    SET   
  +        LEFT_PAREN  
  +            ( FILESTREAM_ON EQ_OR_ASSIGN   
  +                ( schemaName | fileGroup | STRING ) )  
  +            | (SYSTEM_VERSIONING EQ_OR_ASSIGN   
  +                  (   
  +                      OFF   
  +                  	|alterSetOnClause 
  +                  ) 
  +               ) 
  +          RIGHT_PAREN 
  +        ; 
  +
  +alterSetOnClause:
  +	ON   
  +      (LEFT_PAREN 
  +      		HISTORY_TABLE EQ_OR_ASSIGN tableName   
  +            (COMMA DATA_CONSISTENCY_CHECK EQ_OR_ASSIGN ( ON | OFF ) )? 
  +            (COMMA HISTORY_RETENTION_PERIOD EQ_OR_ASSIGN 
  +	        	( 
  +	             	INFINITE | NUMBER (DAY | DAYS | WEEK | WEEKS | MONTH | MONTHS | YEAR | YEARS ) 
  +	            ) 
  +             )?  
  +     RIGHT_PAREN  
  +    )?
  + 	; 
  +      
  +alterRebuild:
  +    REBUILD   
  +    	(
  +      		((PARTITION EQ_OR_ASSIGN ALL)? ( WITH LEFT_PAREN rebuildOption ( COMMA rebuildOption)* RIGHT_PAREN )) 
  +      		| ( PARTITION EQ_OR_ASSIGN numberRange (WITH LEFT_PAREN singlePartitionRebuildOption (COMMA singlePartitionRebuildOption)* RIGHT_PAREN )?)  
  +      	)
  +    ;		
  +	
  +fileTableOption :  
  +    ((ENABLE | DISABLE) FILETABLE_NAMESPACE)  
  +   	|(SET LEFT_PAREN FILETABLE_DIRECTORY EQ_OR_ASSIGN directoryName RIGHT_PAREN ) 
  +    ;  
  +
  +stretchConfiguration :  
  +    SET 
  +    	LEFT_PAREN  
  +	        REMOTE_DATA_ARCHIVE   
  +	        (  
  +	            (EQ_OR_ASSIGN ON LEFT_PAREN  tableStretchOptions  RIGHT_PAREN)  
  +	          | (EQ_OR_ASSIGN OFF_WITHOUT_DATA_RECOVERY LEFT_PAREN MIGRATION_STATE EQ_OR_ASSIGN PAUSED RIGHT_PAREN)  
  +	          | (LEFT_PAREN tableStretchOptions (COMMA )? RIGHT_PAREN)  
  +	        )  
  +        RIGHT_PAREN  
  +	;
  +
  +singlePartitionRebuildOption :  
  +      (SORT_IN_TEMPDB EQ_OR_ASSIGN ( ON | OFF ))  
  +    | (MAXDOP EQ_OR_ASSIGN NUMBER)  
  +    | (DATA_COMPRESSION EQ_OR_ASSIGN ( NONE | ROW | PAGE | COLUMNSTORE | COLUMNSTORE_ARCHIVE))  
  +    | (ONLINE EQ_OR_ASSIGN ( ON (LEFT_PAREN lowPriorityLockWait RIGHT_PAREN )?| OFF)) 
  +	;
  +
  +lowPriorityLockWait:  
  +    WAIT_AT_LOW_PRIORITY LEFT_PAREN MAX_DURATION EQ_OR_ASSIGN NUMBER ( MINUTES )? COMMA
  +    ABORT_AFTER_WAIT EQ_OR_ASSIGN ( NONE | SELF | BLOCKERS ) RIGHT_PAREN   
  +;
  +
  +rebuildOption:   
  +    DATA_COMPRESSION EQ_OR_ASSIGN (COLUMNSTORE | COLUMNSTORE_ARCHIVE )
  +    (ON PARTITIONS LEFT_PAREN numberRange (COMMA numberRange)* RIGHT_PAREN)   
  +	;
  +
  +	
  +numberRange:
  +	NUMBER (TO NUMBER)?
  +	;
  
positive.code: 
  primaryKeyOnClause:
  	ON (
  		(schemeName LEFT_PAREN  columnName RIGHT_PAREN)   
           | fileGroup 
           | STRING 
          ) 
  
negative.code: createMemoryTable:	
      LEFT_PAREN  
  		columnOption (COMMA columnOption)*
  		(COMMA periodClause)?  
      RIGHT_PAREN 
      (WITH LEFT_PAREN tableOptOption ( COMMA tableOptOption)* RIGHT_PAREN)? 
  	; 
  