在 T-SQL 中强制执行不区分大小写的列引用

Enforcing case insensitive column references in T-SQL

我正在使用 SQL Server 2014。我动态生成了 SQL,看起来像这样(为简洁起见进行了简化):

with CTE as 
(
    select field as [field], field as [Field] 
    from myTable
)
select [field], [Field] 
from CTE

但是上面的方法导致了这个错误:

The column 'Field' was specified multiple times for 'CTE'.

我会 expect/want 这行得通,因为 2 列实际上是独一无二的,考虑到大小写。无论如何我们可以要求 SQL (也许通过一些 SET 选项)将它们视为唯一的?

我动态生成的 SQL 非常复杂,很难识别这样的 'duplicates' 和 'combine'。

从理论上讲,您可以将数据库的排序规则更改为区分大小写的选项。区分大小写 database/server 排序规则也会考虑别名的大小写敏感度。 Table 列排序规则,而排序 select 中的列则不会。

Changing database/server collation will change a whole lot else though。修复别名问题将是一个非常极端的改变,我怀疑这对您来说是否是一个可行的解决方案。

就是说,如果您的动态 SQL 能够看到别名 field 已经存在并为同一列的下一个实例使用大写别名 Field,我会认为您可以简单地将其调整为 field1field2 等。您始终可以在 outer/final select 中将它们重新命名为任何您想要的别名,他们只需要在 CTE 查询中是唯一的。