3

我希望能够(有效地)对数据库视图进行排序-我知道从概念上讲,数据库视图中的顺序是无效的,但是我有以下情况要处理:

  • 第三方遗留应用程序,它使用 select(*) from tablename 语句从数据库表中读取数据
  • 遗留应用程序对记录的顺序非常敏感
  • 我编写的一个应用程序允许用户更轻松地管理表中的数据,但是从表中插入和删除自然会打乱记录的顺序。

将遗留应用程序中的语句更改为 select (*) from tablename order by field 将解决我的问题,但不是一个选项。

所以 - 我已经设置了一个临时表,数据可以以正确的顺序导出到其中,但这是一个资源匮乏的选项,意味着数据在遗留应用程序中不是“活的”,并且是额外的工作用户。

我希望能够获得具有这些约束的表格的有序版本。有什么想法吗?


更新 - 我正在使用 Sybase 12.5,但我想避免与特定 RDBMS 紧密耦合的解决方案 - 它可能会改变。

由于此 Wikipedia 条目中提到的 SQL 标准,我无法向视图添加“order by”子句

4

6 回答 6

2

首先,我以前必须从事过这种类型的项目,这真是个婊子。节哀顺变。

这有点小,但是如果您的 DBMS 支持它,也许您可​​以创建一个用户定义的表函数,该函数从您的旧表中进行有序选择,然后设置您的视图以从 UDTF 中进行选择。不过,这不是我以前做过的任何事情。

于 2008-10-03T21:42:49.757 回答
1

这不是很好,但它的工作原理

CREATE VIEW OrderedTable
AS SELECT TOP (Select Count(*) from UnorderedTable) *
FROM UnorderedTable Order By field
于 2008-10-03T21:38:13.853 回答
1

您可以尝试使用表值函数。您没有指定您的数据库供应商,但以下是您在 TSQL (Sql Server) 中的操作方式:

CREATE FUNCTION orderedTable() 
RETURNS @returnTable TABLE 
    (val varchar(100)) AS
BEGIN
    insert @returnTable (val)
    select val from MyTable
    order by val desc
    RETURN 
END

GO

SELECT * FROM orderedTable
于 2008-10-03T21:46:07.397 回答
0

Following up on the info you guys have provided, looks like I can't do what I want to on Sybase ASE 12.5.

MSSQL Server and Sybase ASE 15.x should do what's needed - hopefully I'll be able to arrange something. Not really sure which one to accept til I've got something working, but I'll come back and accept an answer then.

于 2008-10-06T19:29:38.590 回答
0

如果我理解正确,您可以通过以下方式解决此问题:
1) 重命名原始表
2) 使用旧应用程序查询的表的名称创建视图。
3) 将视图定义为以旧版应用程序期望的方式对记录进行排序的查询。

于 2008-10-03T21:42:45.327 回答
0

在 MS Sql Server 中,我们可以将标准混为一谈并创建如下视图:

SELECT TOP 100 PERCENT * FROM TABLE ORDER BY 1

这让我们可以解决这样的问题。由于 Sybase 和 Sql Server 共享 T-SQL,我认为您很有可能也可以这样做。

或者,您可以在应该排序的字段上设置聚集索引。这将强制存储顺序,它将*以“自然顺序”返回。

  • 诚然,这是一个实现细节。SQL 标准(也不是任何特定的供应商,AFAIK)不保证没有 order by 子句的排序......但是,嘿,如果你可以使用它,那么你就不会问了。
于 2008-10-03T22:36:55.780 回答