为什么在使用T-SQL创建表时,最后一个字段后面的尾随逗号不重要?

Jon*_*ssi 4 t-sql ddl sql-server-2008-r2

这些陈述中的一个不应该起作用而且一个失败吗?

直觉说语句2应该失败,因为在int之后有一个逗号而没有列出第二列.

然而,在最后一列数据类型之后,工作和尾随逗号","都没有区别.

-- Statement 1
CREATE TABLE dbo.MyTable1( col1 int);

-- Statement 2
CREATE TABLE dbo.MyTable2( col1 int,);
Run Code Online (Sandbox Code Playgroud)

然而(这是预期的):在最后一个字段之后的两个逗号",,"确实导致失败:

-- Statement 3
CREATE TABLE dbo.MyTable3( col1 int,,);

Msg 102, Level 15, State 1, Line 1
Incorrect syntax near ','.
Run Code Online (Sandbox Code Playgroud)

测试显示它不仅仅是允许通过的最后一个字段之后的任何字符.例如,这失败了:

-- Statement 3
CREATE TABLE dbo.MyTable3( col1 int ~);

Msg 102, Level 15, State 1, Line 1
Incorrect syntax near '~'.
Run Code Online (Sandbox Code Playgroud)

也许SQL Server正在"为桌子保留席位"?主键可能呢?我真的不知道.

我使用的是Microsoft SQL Server 2008 R2(SP1) - 10.50.2500.0(X64).

Rob*_*vey 6

请参阅http://connect.microsoft.com/SQLServer/feedback/details/273348/trailing-comma-allowed-in-create-table:

描述

执行CREATE TABLE命令时,允许在最后一列之后使用尾随逗号.基于BOL中的语法和其他T-SQL语句中的列表中的逗号用法,此行为不一致.这是一个非常小的问题,似乎不会引起任何不良副作用.看来解析器可能有点过时了.

微软认为这是一个错误,但是一个小问题.

这在前一段时间被解决为"不会修复",但我们没有解释原因.简单地说,这看起来非常无害,并且不值得在服务包中修复.我们可能会考虑在将来的版本中修复此问题.