重复列名称...但仅当数据库不区分大小写时

时间:2011-06-30 16:14:04

标签: sql collation linked-server

我正在尝试从链接服务器连接查询具有区分大小写排序规则的数据库上的视图。还有一点要注意的是我试图查询的视图基本上是三个索引视图的包装器。

我得到的错误是:

  

通过OPENQUERY和OPENROWSET获得的结果集中不允许使用重复的列名。列名“ExtPrice”是重复的。

在视图中,我有EXTPRICE以及ExtPrice。当我直接从服务器查询此视图时,我没有任何问题...但是当我尝试通过链接服务器使用查询时,我收到上述错误。

  • 这是一个整理问题吗?
  • 如何通过链接服务器使用此视图,仍然让查询了解视图区分大小写?

如果这是一个愚蠢的问题,我会事先道歉。

2 个答案:

答案 0 :(得分:3)

是的,这是您的视图所在的服务器上区分大小写的排序规则的结果。

这就是为什么我总是在服务器级别直接使用区分大小写的排序规则(而不是仅仅使用列级别的排序规则),正如我在此指出的那样: http://www.sqlmag.com/blog/practical-sql-server-45/tsql/Collation-SQL-Server-139576

只是,在尝试围绕如何将COLLATE子句塞入分布式查询中时,我认为必须有更好的方法。

而且,看起来您可以将某些特定选项设置为链接服务器定义的一部分: http://msdn.microsoft.com/en-us/library/ms191145.aspx 因为它定义了在分布式查询中使用排序规则时如何指定排序规则选项。

但问题是,您需要使用链接服务器而不是允许临时分布式查询(但无论如何它们都是安全风险/担忧)。因此,无论如何,我建议使用链接服务器作为更好的方法。

尝试此链接 - 因为它提供了有关如何控制链接服务器上的排序规则设置的详细信息: http://msdn.microsoft.com/en-us/library/ms186839.aspx

当然,如果可能的话,我建议更改列名。

- 麦克

答案 1 :(得分:1)

您的列名需要更改。如果ENTRYDATE列是文本而EntryDate是Date数据类型,则将ENTRYDATE更改为ENTRYDATE_TEXT。或者将EntryDate更改为EntryDate_Improved。即使您可以让链接服务器视图感到满意,未来使用它的开发人员也会浪费时间并可能引入错误,因为它非常不清楚。