Microsoft SQL Server接受变量名称中的空白-为什么?

时间:2019-03-22 08:28:30

标签: sql sql-server orm linqpad

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?在列名中使用空格可以正确使用吗?

0 个答案:

没有答案