Microsoft SQL Server принимает пустое имя переменной - почему? - PullRequest
1 голос
/ 22 марта 2019

Microsoft SQL Server допускает использование пустых пространств в именах переменных с использованием скобок:

CREATE TABLE [dbo].[MyDataTable](
    [Compo 1] [nvarchar](50) NULL,
    [Compo 2] [nvarchar](50) NULL,
    [Compo 3] [nvarchar](50) NULL,
    compo1 [nvarchar](50) NULL,
    compo2 [nvarchar](50) NULL,
    compo3 [nvarchar](50) NULL,
    compo_1 [nvarchar](50) NULL,
    compo_2 [nvarchar](50) NULL,
    compo_3 [nvarchar](50) NULL)

Проблема заключается в том, что происходит, когда такой инструмент, как структура сущностей или NHibernate, или любой другой ORM инструмент или даже вручную я пытаюсь создать модель на основе моей базы данных?

При использовании C #, VB.NET, Java и, возможно, большинства языков разработки, невозможно использовать пробелы в имени переменной.

Итак, чтобы исправить этого поставщика по умолчанию LINQPad, игнорируйте и удаляйтепробел при генерации C #, альтернативный поставщик Linq2Db, похоже, заменяет пробелы подчеркиванием.Все эти правила генерации могут конфликтовать с другой переменной в моей базе данных, если у меня есть переменная, которая уже является альтернативным решением, как в моем примере.

В LINQPad у меня есть это

MyDataTable.Compo1; // With capital letter and mapto [Compo 1] [nvarchar](50) NULL,
MyDataTable.compo2; // with small letter and map to compo2 [nvarchar](50) NULL,
MyDataTable.compo3;
MyDataTable.compo_1;
MyDataTable.compo_2;
MyDataTable.compo_3;

Такмои вопросы: как это возможно, что Microsoft приняла это как допустимое имя столбца SQL?Это часть стандарта SQL или специфическая для SQL Server?Что может быть правильным положительным использованием кроме использования пробелов в именах моих столбцов?

...