提交 c290c62a 编写于 作者: C codefairy08

split sqlserver ddl rule

fix test bug
上级 1356b81b
grammar SQLServerBase;
import SQLServerKeyword,Keyword,Symbol,BaseRule,DataType;
dataType:
typeName
(
LEFT_PAREN
(
(NUMBER ( COMMA NUMBER )?)
| MAX
|((CONTENT | DOCUMENT)? xmlSchemaCollection)
)
RIGHT_PAREN
)?
;
privateExprOfDb:
windowedFunction
|atTimeZoneExpr
|castExpr
|convertExpr
;
atTimeZoneExpr:
ID (WITH TIME ZONE)? STRING
;
castExpr:
CAST LEFT_PAREN expr AS dataType (LEFT_PAREN NUMBER RIGHT_PAREN )? RIGHT_PAREN
;
convertExpr:
CONVERT ( dataType (LEFT_PAREN NUMBER RIGHT_PAREN )? COMMA expr (COMMA NUMBER)?)
;
windowedFunction:
functionCall overClause
;
overClause:
OVER
LEFT_PAREN
partitionByClause?
orderByClause?
rowRangeClause?
RIGHT_PAREN
;
partitionByClause:
PARTITION BY expr (COMMA expr)*
;
orderByClause:
ORDER BY orderByExpr (COMMA orderByExpr)*
;
orderByExpr:
expr (COLLATE collationName)? (ASC | DESC)?
;
rowRangeClause:
(ROWS | RANGE) windowFrameExtent
;
windowFrameExtent:
windowFramePreceding
| windowFrameBetween
;
windowFrameBetween:
BETWEEN windowFrameBound AND windowFrameBound
;
windowFrameBound:
windowFramePreceding
| windowFrameFollowing
;
windowFramePreceding:
(UNBOUNDED PRECEDING)
| NUMBER PRECEDING
| CURRENT ROW
;
windowFrameFollowing:
UNBOUNDED FOLLOWING
| NUMBER FOLLOWING
| CURRENT ROW
;
\ No newline at end of file
...@@ -292,3 +292,7 @@ WEEKS: W E E K S; ...@@ -292,3 +292,7 @@ WEEKS: W E E K S;
YEAR: Y E A R; YEAR: Y E A R;
YEARS: Y E A R S; YEARS: Y E A R S;
FILETABLE_NAMESPACE: F I L E T A B L E UL_ N A M E S P A C E; FILETABLE_NAMESPACE: F I L E T A B L E UL_ N A M E S P A C E;
SPLIT: S P L I T;
DISTRIBUTION: D I S T R I B U T I O N;
ROUND_ROBIN:R O U N D UL_ R O B I N;
REPLICATE: R E P L I C A T E;
grammar SQLServerAlterTable;
import SQLServerKeyword, DataType, Keyword, SQLServerBase,BaseRule,Symbol;
alterTable:
alterTableOp
(alterColumn
|addColumn
|alterDrop
|alterCheckConstraint
|alterTrigger
|alterTracking
|alterSwitch
|alterSet
|alterRebuild
|mergeOrSplit
|tableOption
|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)?
;
addColumn:
(WITH (CHECK | NOCHECK))?
ADD
(
(alterColumnAddOption (COMMA alterColumnAddOption)*)
|(
(columnNameGeneratedClause COMMA periodClause)
|(periodClause COMMA columnNameGeneratedClause)
)
)
;
periodClause:
PERIOD FOR SYSTEM_TIME LEFT_PAREN columnName
COMMA columnName RIGHT_PAREN
;
alterColumnAddOption:
columnDefinition
|constraintForColumn
| computedColumnDefinition
| tableConstraint
| columnSetDefinition
| tableIndex
| columnIndex
;
constraintForColumn:
columnConstraint FOR columnName
;
columnDefinition:
columnName dataType
columnConstraint?
collateClause?
(NOT? NULL)?
;
columnConstraint :
(CONSTRAINT constraintName )?
DEFAULT simpleExpr
;
computedColumnDefinition :
columnName AS expr
(PERSISTED( NOT NULL )?)?
columnConstraint?
;
tableConstraint:
(CONSTRAINT constraintName )?
(
tablePrimaryConstraint
| tableForeignKeyConstraint
| (CHECK expr)
)
;
tablePrimaryConstraint:
primaryKeyUnique (CLUSTERED | NONCLUSTERED)?
(
columnNameWithSortsWithParen
|hashWithBucket
)
;
hashWithBucket:
HASH columnList withBucket
;
withBucket:
WITH LEFT_PAREN BUCKET_COUNT EQ_OR_ASSIGN NUMBER RIGHT_PAREN
;
primaryKeyUnique:
(PRIMARY KEY)
| UNIQUE
;
columnNameWithSortsWithParen:
LEFT_PAREN columnNameWithSort (COMMA columnNameWithSort)* RIGHT_PAREN
;
columnNameWithSort:
columnName ( ASC | DESC )?
;
tableForeignKeyConstraint:
(FOREIGN KEY)? columnList
REFERENCES tableName columnList
;
columnSetDefinition :
columnSetName ID COLUMN_SET FOR ALL_SPARSE_COLUMNS
;
columnIndex:
INDEX indexName
( CLUSTERED | NONCLUSTERED )?
HASH withBucket
;
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
|alterTableDropIndex
|(PERIOD FOR SYSTEM_TIME)
)
;
alterTableDropConstraint:
CONSTRAINT? (IF EXISTS)?
dropConstraintName (COMMA dropConstraintName)*
;
dropConstraintName:
constraintName dropConstraintWithClause?
;
dropConstraintWithClause:
WITH LEFT_PAREN dropConstraintOption ( COMMA dropConstraintOption)* RIGHT_PAREN
;
dropConstraintOption:
(
(MAXDOP EQ_OR_ASSIGN NUMBER )
| (ONLINE EQ_OR_ASSIGN ( ON | OFF ))
| (MOVE TO
( schemaName LEFT_PAREN columnName RIGHT_PAREN | fileGroup | STRING ) )
)
;
alterTableDropColumn:
COLUMN (IF EXISTS)? columnNames
;
alterTableDropIndex:
INDEX (IF EXISTS)?
indexName (COMMA indexName)*
;
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
(
setFileStreamClause
|setSystemVersionClause
)
RIGHT_PAREN
;
setFileStreamClause:
FILESTREAM_ON EQ_OR_ASSIGN ( schemaName | fileGroup | STRING )
;
setSystemVersionClause:
SYSTEM_VERSIONING EQ_OR_ASSIGN
(
OFF
|alterSetOnClause
)
;
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
;
tableStretchOptions:
( FILTER_PREDICATE EQ_OR_ASSIGN ( NULL | functionCall ) COMMA )?
MIGRATION_STATE EQ_OR_ASSIGN ( OUTBOUND | INBOUND | PAUSED )
;
singlePartitionRebuildOption :
(SORT_IN_TEMPDB EQ_OR_ASSIGN ( ON | OFF ))
| (MAXDOP EQ_OR_ASSIGN NUMBER)
| compressionOption
| (ONLINE EQ_OR_ASSIGN (OFF |onLowPriorLockWait))
;
onLowPriorLockWait:
ON (LEFT_PAREN lowPriorityLockWait RIGHT_PAREN )?
;
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:
(compressionOption (ON PARTITIONS LEFT_PAREN numberRange (COMMA numberRange)* RIGHT_PAREN))
| eqOnOffOption
| MAXDOP EQ_OR_ASSIGN NUMBER
| (ONLINE EQ_OR_ASSIGN (OFF | onLowPriorLockWait))
;
eqOnOffOption:
(
PAD_INDEX
|FILLFACTOR
|IGNORE_DUP_KEY
|STATISTICS_NORECOMPUTE
|ALLOW_ROW_LOCKS
|ALLOW_PAGE_LOCKS
|SORT_IN_TEMPDB
)eqOnOff
;
eqOnOff:
EQ_OR_ASSIGN ( ON | OFF )
;
compressionOption:
DATA_COMPRESSION EQ_OR_ASSIGN ( NONE | ROW | PAGE | COLUMNSTORE | COLUMNSTORE_ARCHIVE)
;
numberRange:
NUMBER (TO NUMBER)?
;
alterIndex:
ALTER INDEX indexName
typeName REBUILD
(NONCLUSTERED? WITH LEFT_PAREN BUCKET_COUNT EQ_OR_ASSIGN NUMBER RIGHT_PAREN)?
;
tableIndex:
INDEX indexName
(
indexNonClusterClause
|indexClusterClause
)
;
indexNonClusterClause:
NONCLUSTERED
(hashWithBucket | (columnNameWithSortsWithParen indexOnClause?))
;
indexOnClause:
(ON groupName)
| DEFAULT
;
indexClusterClause:
CLUSTERED COLUMNSTORE
(WITH COMPRESSION_DELAY EQ_OR_ASSIGN NUMBER MINUTES?)?
indexOnClause?
;
tableOption:
(SET LEFT_PAREN LOCK_ESCALATION EQ_OR_ASSIGN (AUTO | TABLE | DISABLE) RIGHT_PAREN)
|(MEMORY_OPTIMIZED EQ_OR_ASSIGN ON)
| (DURABILITY EQ_OR_ASSIGN (SCHEMA_ONLY | SCHEMA_AND_DATA))
| (SYSTEM_VERSIONING EQ_OR_ASSIGN ON ( LEFT_PAREN HISTORY_TABLE EQ_OR_ASSIGN tableName
(COMMA DATA_CONSISTENCY_CHECK EQ_OR_ASSIGN ( ON | OFF ) )? RIGHT_PAREN )?)
;
mergeOrSplit:
(SPLIT | MERGE) RANGE LEFT_PAREN simpleExpr RIGHT_PAREN
;
\ No newline at end of file
grammar SQLServerDDL; grammar SQLServerCreateTable;
import SQLServerKeyword, DataType, Keyword, BaseRule,DDLBase,MySQLDQL,DQLBase,Symbol; import SQLServerKeyword, DataType, Keyword, SQLServerBase,BaseRule,Symbol;
createTable: createTable:
createTableOpWithName createTableHeader createTableBody
(
createMemoryTable
|createDiskTable
)
; ;
createTableOpWithName: createTableHeader:
CREATE TABLE tableName CREATE TABLE tableName
; ;
createDiskTable: createTableBody:
(AS FILETABLE)? (AS FILETABLE)?
LEFT_PAREN LEFT_PAREN
createTableDefinition (COMMA createTableDefinition)* createTableDefinition (COMMA createTableDefinition)*
periodClause? (COMMA periodClause)?
RIGHT_PAREN RIGHT_PAREN
(ON ( schemaName LEFT_PAREN columnName RIGHT_PAREN (ON ( schemaName LEFT_PAREN columnName RIGHT_PAREN
| fileGroup | fileGroup
...@@ -72,19 +68,7 @@ columnDefinitionOption: ...@@ -72,19 +68,7 @@ columnDefinitionOption:
|columnIndex |columnIndex
; ;
dataType:
typeName
(
LEFT_PAREN
(
(NUMBER ( COMMA NUMBER )?)
| MAX
|((CONTENT | DOCUMENT)? xmlSchemaCollection)
)
RIGHT_PAREN
)?
;
columnConstraint : columnConstraint :
(CONSTRAINT constraintName )? (CONSTRAINT constraintName )?
( primaryKeyConstraint ( primaryKeyConstraint
...@@ -94,9 +78,26 @@ columnConstraint : ...@@ -94,9 +78,26 @@ columnConstraint :
; ;
primaryKeyConstraint: primaryKeyConstraint:
(PRIMARY KEY | UNIQUE) (CLUSTERED | NONCLUSTERED)? (PRIMARY KEY | UNIQUE)
(diskTablePrimaryKeyConstraintOption | memoryTablePrimaryKeyConstraintOption)
;
diskTablePrimaryKeyConstraintOption:
(CLUSTERED | NONCLUSTERED)?
primaryKeyWithClause? primaryKeyWithClause?
primaryKeyOnClause? primaryKeyOnClause?
;
memoryTablePrimaryKeyConstraintOption:
CLUSTERED withBucket?
;
hashWithBucket:
HASH columnList withBucket
;
withBucket:
WITH LEFT_PAREN BUCKET_COUNT EQ_OR_ASSIGN NUMBER RIGHT_PAREN
; ;
primaryKeyWithClause: primaryKeyWithClause:
...@@ -176,16 +177,26 @@ tableConstraint: ...@@ -176,16 +177,26 @@ tableConstraint:
tablePrimaryConstraint: tablePrimaryConstraint:
primaryKeyUnique primaryKeyUnique
( CLUSTERED | NONCLUSTERED )? (diskTablePrimaryConstraintOption | memoryTablePrimaryConstraintOption)
columnNameWithSortsWithParen
primaryKeyWithClause?
primaryKeyOnClause?
; ;
primaryKeyUnique: primaryKeyUnique:
(PRIMARY KEY) (PRIMARY KEY)
| UNIQUE | UNIQUE
; ;
diskTablePrimaryConstraintOption:
( CLUSTERED | NONCLUSTERED )?
columnNameWithSortsWithParen
primaryKeyWithClause?
primaryKeyOnClause?
;
memoryTablePrimaryConstraintOption:
NONCLUSTERED
(columnNameWithSortsWithParen
| hashWithBucket)
;
columnNameWithSortsWithParen: columnNameWithSortsWithParen:
LEFT_PAREN columnNameWithSort (COMMA columnNameWithSort)* RIGHT_PAREN LEFT_PAREN columnNameWithSort (COMMA columnNameWithSort)* RIGHT_PAREN
...@@ -202,11 +213,12 @@ tableIndex: ...@@ -202,11 +213,12 @@ tableIndex:
( (
((CLUSTERED | NONCLUSTERED )? columnNameWithSortsWithParen) ((CLUSTERED | NONCLUSTERED )? columnNameWithSortsWithParen)
| (CLUSTERED COLUMNSTORE) | (CLUSTERED COLUMNSTORE)
| (( NONCLUSTERED )? COLUMNSTORE columnList) | (( NONCLUSTERED )? ((COLUMNSTORE columnList) | hashWithBucket))
| (CLUSTERED COLUMNSTORE (WITH LEFT_PAREN COMPRESSION_DELAY EQ_OR_ASSIGN (NUMBER MINUTES?) RIGHT_PAREN)?)
) )
) )
(WHERE expr)? (WHERE expr)?
(WITH LEFT_PAREN indexOption ( COMMA indexOption)* RIGHT_PAREN)? (WITH LEFT_PAREN indexOption ( COMMA indexOption)* RIGHT_PAREN)?
( ON ( ON
( (
(schemaName LEFT_PAREN columnName RIGHT_PAREN) (schemaName LEFT_PAREN columnName RIGHT_PAREN)
...@@ -214,10 +226,10 @@ tableIndex: ...@@ -214,10 +226,10 @@ tableIndex:
| DEFAULT | DEFAULT
) )
)? )?
( FILESTREAM_ON ( groupName | schemaName | STRING ) )? ( FILESTREAM_ON ( groupName | schemaName | STRING ))?
) )
; ;
tableOption: tableOption:
(DATA_COMPRESSION EQ_OR_ASSIGN ( NONE | ROW | PAGE ) (ON PARTITIONS LEFT_PAREN partitionExpressions RIGHT_PAREN )?) (DATA_COMPRESSION EQ_OR_ASSIGN ( NONE | ROW | PAGE ) (ON PARTITIONS LEFT_PAREN partitionExpressions RIGHT_PAREN )?)
|( FILETABLE_DIRECTORY EQ_OR_ASSIGN directoryName ) |( FILETABLE_DIRECTORY EQ_OR_ASSIGN directoryName )
...@@ -236,7 +248,22 @@ tableOption: ...@@ -236,7 +248,22 @@ tableOption:
) )
|tableOptOption |tableOptOption
; ;
tableOptOption :
(MEMORY_OPTIMIZED EQ_OR_ASSIGN ON)
| (DURABILITY EQ_OR_ASSIGN (SCHEMA_ONLY | SCHEMA_AND_DATA))
| (SYSTEM_VERSIONING EQ_OR_ASSIGN ON ( LEFT_PAREN HISTORY_TABLE EQ_OR_ASSIGN tableName
(COMMA DATA_CONSISTENCY_CHECK EQ_OR_ASSIGN ( ON | OFF ) )? RIGHT_PAREN )?)
;
dataWareHouseTableOption :
DISTRIBUTION EQ_OR_ASSIGN
(
(HASH LEFT_PAREN columnName RIGHT_PAREN)
| ROUND_ROBIN
| REPLICATE
)
;
tableStretchOptions: tableStretchOptions:
( FILTER_PREDICATE EQ_OR_ASSIGN ( NULL | functionCall ) COMMA )? ( FILTER_PREDICATE EQ_OR_ASSIGN ( NULL | functionCall ) COMMA )?
MIGRATION_STATE EQ_OR_ASSIGN ( OUTBOUND | INBOUND | PAUSED ) MIGRATION_STATE EQ_OR_ASSIGN ( OUTBOUND | INBOUND | PAUSED )
...@@ -267,366 +294,5 @@ partitionExpression: ...@@ -267,366 +294,5 @@ partitionExpression:
partitionRange: partitionRange:
NUMBER TO NUMBER NUMBER TO NUMBER
; ;
createMemoryTable:
LEFT_PAREN
columnOption (COMMA columnOption)*
(COMMA periodClause)?
RIGHT_PAREN
(WITH LEFT_PAREN tableOptOption ( COMMA tableOptOption)* RIGHT_PAREN)?
;
columnOption:
columnOptDefinition
| (tableOptConstraint (COMMA tableOptConstraint)*)?
| tableIndex?
;
columnOptDefinition :
columnName dataType
columnOptDefinitionOpt*
;
columnOptDefinitionOpt:
(COLLATE collationName )
| (GENERATED ALWAYS AS ROW (START | END) HIDDEN_? )
| (NOT? NULL)
| ((CONSTRAINT constraintName )? DEFAULT expr )
| ( IDENTITY ( LEFT_PAREN NUMBER COMMA NUMBER RIGHT_PAREN ) )
| columnOptConstraint
| columnOptIndex
;
columnOptConstraint :
(CONSTRAINT constraintName )?
(
primaryKeyOptConstaint
| foreignKeyOptConstaint
| (CHECK LEFT_PAREN expr RIGHT_PAREN)
)
;
primaryKeyOptConstaint:
primaryKeyUnique
(
(NONCLUSTERED columnNameWithSortsWithParen)
| (NONCLUSTERED HASH WITH LEFT_PAREN BUCKET_COUNT EQ_OR_ASSIGN NUMBER RIGHT_PAREN)
)
;
foreignKeyOptConstaint:
(FOREIGN KEY )? REFERENCES tableName ( LEFT_PAREN columnName RIGHT_PAREN )?
;
tableOptConstraint:
( CONSTRAINT constraintName )?
(
(primaryKeyUnique
(
(NONCLUSTERED columnNameWithSortsWithParen)
| (NONCLUSTERED HASH columnList WITH LEFT_PAREN BUCKET_COUNT EQ_OR_ASSIGN NUMBER RIGHT_PAREN)
))
| (FOREIGN KEY columnList REFERENCES tableName columnList? )
| (CHECK LEFT_PAREN expr RIGHT_PAREN )
)
;
columnOptIndex:
INDEX indexName
(NONCLUSTERED? (HASH WITH LEFT_PAREN BUCKET_COUNT EQ_OR_ASSIGN NUMBER RIGHT_PAREN)? )
;
tableOptIndex :
INDEX indexName
(
( NONCLUSTERED ? HASH columnList WITH LEFT_PAREN BUCKET_COUNT EQ_OR_ASSIGN NUMBER RIGHT_PAREN )
| ( NONCLUSTERED ? columnNameWithSortsWithParen ( ON groupName | DEFAULT )? )
| (CLUSTERED COLUMNSTORE (WITH LEFT_PAREN COMPRESSION_DELAY EQ_OR_ASSIGN (NUMBER MINUTES?) RIGHT_PAREN)? ( ON groupName | DEFAULT )?)
)
;
tableOptOption :
(MEMORY_OPTIMIZED EQ_OR_ASSIGN ON)
| (DURABILITY EQ_OR_ASSIGN (SCHEMA_ONLY | SCHEMA_AND_DATA))
| (SYSTEM_VERSIONING EQ_OR_ASSIGN ON ( LEFT_PAREN HISTORY_TABLE EQ_OR_ASSIGN tableName
(COMMA DATA_CONSISTENCY_CHECK EQ_OR_ASSIGN ( ON | OFF ) )? RIGHT_PAREN )?)
;
privateExprOfDb:
windowedFunction
|atTimeZoneExpr
|castExpr
|convertExpr
;
atTimeZoneExpr:
ID (WITH TIME ZONE)? STRING
;
castExpr:
CAST LEFT_PAREN expr AS dataType (LEFT_PAREN NUMBER RIGHT_PAREN )? RIGHT_PAREN
;
convertExpr:
CONVERT ( dataType (LEFT_PAREN NUMBER RIGHT_PAREN )? COMMA expr (COMMA NUMBER)?)
;
windowedFunction:
functionCall overClause
;
overClause:
OVER
LEFT_PAREN
partitionByClause?
orderByClause?
rowRangeClause?
RIGHT_PAREN
;
partitionByClause:
PARTITION BY expr (COMMA expr)*
;
orderByClause:
ORDER BY orderByExpr (COMMA orderByExpr)*
;
orderByExpr:
expr (COLLATE collationName)? (ASC | DESC)?
;
rowRangeClause:
(ROWS | RANGE) windowFrameExtent
;
windowFrameExtent:
windowFramePreceding
| windowFrameBetween
;
windowFrameBetween:
BETWEEN windowFrameBound AND windowFrameBound
;
windowFrameBound:
windowFramePreceding
| windowFrameFollowing
;
windowFramePreceding:
(UNBOUNDED PRECEDING)
| NUMBER PRECEDING
| CURRENT ROW
;
windowFrameFollowing:
UNBOUNDED FOLLOWING
| 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)?
;
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册