0

我有一个多语言应用程序的需求,其中搜索显示的列是从配置中提取的,并且可以根据配置对数据进行排序。

问题 1 - 我正在使用这样的 Select 查询:

SELECT * 
FROM TABLE 
ORDER BY 1 COLLATE SQL_Latin1_General_CP1_CI_AS DESC,
ORDER BY 4 COLLATE SQL_Latin1_General_CP1_CI_AS DESC

我收到以下错误:

表达式类型 int 对于 COLLATE 子句无效。

是否可以在不指定列名的情况下完成这项工作,并且只使用我们编写普通 SQL 查询的方式使用列索引?

问题 2 - 我还需要支持基于整数列的排序,如“ID”

但是我遇到了与问题 1 中提到的相同的错误。是否有任何解决方法可以允许这样做?或者这是我们必须忍受的 SQL Server 限制,即使使用最新版本的 SQL Server 2016?

将不胜感激任何回应/帮助。

4

1 回答 1

2

在 SQL 查询中使用列索引值不是最佳实践,即使它在许多语法中都不起作用

所以最好在查询中使用列名

对于 COLLATE 语句,您可以将其用于字符数据类型字段值。对于数值数据类型,不能使用 COLLATE。

于 2016-12-02T11:27:19.883 回答