我有生成动态SQL语句的简单查询代码:
//Model is loaded with "model.LoadFromConnection"
var EasyQueryCachedObject = new DbQuery();
EasyQueryCachedObject.Model = model; //Specified before
EasyQueryCachedObject.Model.Description = "XXX";
EasyQueryCachedObject.Formats.SetDefaultFormats(FormatType.MsSqlServer);
... //More logic to form query
var builder = new SqlQueryBuilder(EasyQueryCachedObject);
if (builder.CanBuild)
{
builder.BuildSQL();
var SQLQuery = builder.Result.SQL;
var QueryXML = builder.Result.Query.SaveToString();
}
问题是,我正在查询生成SQL的表,例如:
SELECT Entry No
,Item No
,Open
FROM.[dbo].[DataImport_2013]
由于列名包含保留字/空格,因此失败。如何让EasyQuery用方括号将所有列括起来,如下所示?
SELECT [Entry No ]
,[Item No ]
,[Open]
FROM.[dbo].[DataImport_2013]
显然,使用EasyQuery的内置参数的解决方案是首选的,但是如果这不可能,也许某种正则表达式或后模型填充也可以工作,真的,我对任何解决方案都持开放态度。
更新1
尝试了几种方法,包括“QuoteColumnAlias”,生成的查询类似于以下内容:
SELECT DataImport_2018."Entry No " AS "DataImport_2018 Entry No",
DataImport_2018."Item No " AS "DataImport_2018 Item No",
DataImport_2018.Open AS "DataImport_2018 Open"
FROM dbo.DataImport_2018 AS DataImport_2018
保留词“open”仍然有错误,不知怎么的,我需要让引号覆盖所有的栏目,而不仅仅是那些有空格的。。。