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?Что может быть правильным положительным использованием кроме использования пробелов в именах моих столбцов?