结合COLLATE和FILESPEC的T-SQL CREATE DATABASE

时间:2020-09-21 12:10:50

标签: sql-server tsql

根据https://docs.microsoft.com/en-us/sql/t-sql/statements/create-database-transact-sql?view=sql-server-2017处的文档,似乎可以编写一个单一的T-SQL CREATE DATABASE命令,该命令同时包含> 0个文件规范其他,例如COLLATECONTAINMENT指令。

都是可能的/可接受的/成功的,例如

CREATE DATABASE test01 ON PRIMARY (NAME=file1, FILENAME='/var/opts/mssql/data/file1.mdf', SIZE=100MB)

...和...

CREATE DATABASE test01 CONTAINMENT=NONE COLLATE French_CI_AI

...都是可以接受的。

但是,这都不是...

CREATE DATABASE test01 CONTAINMENT=NONE COLLATE French_CI_AI ON PRIMARY (NAME=file1, FILENAME='/var/opts/mssql/data/file1.mdf', SIZE=100MB)

...也不是...

CREATE DATABASE test01 ON PRIMARY (NAME=file1, FILENAME='/var/opts/mssql/data/file1.mdf', SIZE=100MB) CONTAINMENT=NONE COLLATE French_CI_AI 

...看似有效的T-SQL(两者均被MSSQL服务器拒绝为语法错误)。

如文档所暗示的,有没有一种语法方法可以将所有这些组合成一个T-SQL CREATE DATABASE命令?还是我误读了该引用文档的SYNTAX部分,并且不支持单个命令?

1 个答案:

答案 0 :(得分:0)

您问题中doc链接的以下摘录显示了row_list = [0, 0, 0, 1, 1, 2, 2, 2, 2] col_list = ['col1', 'col2', 'col3', 'col1', 'col4', 'col2', 'col3', 'col5', 'col6'] values_list = [1, 2, 3, 4, 5, 6, 7, 8, 9] 语句中子句的必需顺序:

CREATE DATABASE

要遵循此语法,请在数据库名称后立即指定containment选项,并在文件组/文件后添加归类规范:

CREATE DATABASE database_name
[ CONTAINMENT = { NONE | PARTIAL } ]
[ ON
      [ PRIMARY ] <filespec> [ ,...n ]
      [ , <filegroup> [ ,...n ] ]
      [ LOG ON <filespec> [ ,...n ] ]
]
[ COLLATE collation_name ]
[ WITH <option> [,...n ] ]
[;]
相关问题