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

时间:2018-06-29 20:16:37

标签: tsql sql-server-2014

我正在使用SQL Server2014。我已经动态生成了看起来像这样的SQL(为简便起见简化了):

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

但是上述情况会导致此错误:

  

为“ CTE”多次指定了“字段”列。

我希望/希望它能起作用,因为2列实际上是唯一的(考虑到大小写)。无论如何,我们是否可以要求SQL(可能通过某些SET选项)将它们视为唯一?

我动态生成的SQL非常复杂,很难识别和复制这些“重复项”。

1 个答案:

答案 0 :(得分:1)

从理论上讲,您可以将数据库的排序规则更改为区分大小写的选项。区分大小写的数据库/服务器排序规则还将考虑别名的区分大小写。不会对表进行列排序,而在选择中对列进行排序。

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

也就是说,如果动态SQL能够看到别名field已经存在并将大写别名Field用于同一列的下一个实例,我想您可以简单地进行调整可以是field1field2等。您始终可以将它们重新别名为外部/最终选择中想要的任何东西,它们只需要在CTE查询中是唯一的即可。