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 tool或什至手动尝试基于数据库创建模型时,会发生什么问题?
在使用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?在列名中使用空格可以正确使用吗?