2012-06-28 2 views
8

Это не проблема, с которой я сталкиваюсь. Но мне просто интересно, что первая строка в коде, написанном ниже, должна рассматриваться как синтаксическая ошибка SQL Server из-за дополнительной запятой (,) в конце списка столбцов. Но он отлично работает с кодом. Кто-нибудь знает причину?Почему SQL Server не обрабатывает этот код неустойчивым?

CREATE TABLE #TEMP(COL1 INT,COL2 VARCHAR,)  
INSERT INTO #TEMP VALUES (1,'A')  
SELECT * FROM #TEMP  
DROP TABLE #TEMP 
+0

Я предполагаю, что это дизайн решение упростить динамический sql, когда вам не нужно пропустить запятую. Аналогично тому, как LINQ допускает такой анонимный тип в C#: 'new {a = 1, b = 2, c = 3,}'. –

+6

Нельзя разрешить [грамматикой] (http://msdn.microsoft.com/en-us/library/ms174979.aspx), но [в основном безвредным] (https://connect.microsoft.com/SQLServer/ feedback/details/273348/trailing-comma-allowed-in-create-table) –

+1

@Martin Smith: Это зависит, если n на диаграмме содержит 0 или нет. Синтаксис не содержит определения (по крайней мере, я не нашел). – Stefan

ответ

1

Это должно быть помечено как ошибка синтаксиса, но есть ошибка в SQL Server, который не обрабатывает Запятую как синтаксическая ошибка.

Источник: Microsoft Support (Затронутые версии в списке - 6, 6,5 и 2000 - старый, но я предполагаю, что это все еще вокруг, потому что он просто работал для меня в 2008 году)

Смежные вопросы