我有生成动态 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”仍然存在错误,不知何故我需要让引号覆盖所有列,而不仅仅是带空格的...