如何获得排序数据库视图的效果?

时间:2008-10-03 21:33:27

标签: database legacy

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

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

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

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

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


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

我无法在视图中添加'order by'子句,因为this Wikipedia entry中提到的SQL标准

6 个答案:

答案 0 :(得分:2)

首先,我不得不在这类项目上工作,这真是一个婊子。我的哀悼。

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

答案 1 :(得分: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

答案 2 :(得分:0)

这不好,但它有效

CREATE VIEW OrderedTable
AS SELECT TOP (Select Count(*) from UnorderedTable) *
FROM UnorderedTable Order By field

答案 3 :(得分:0)

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

答案 4 :(得分:0)

在MS Sql Server中,我们可以对标准进行标准化并创建一个视图,例如:

SELECT TOP 100 PERCENT * FROM TABLE ORDER BY 1

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

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

  • 诚然,这是一个实施细节。 SQL标准(也没有任何特定的供应商,AFAIK)不保证没有order by子句的订购......但是,嘿,如果你可以使用它,那么你就不会问。

答案 5 :(得分:0)

跟进你们提供的信息,看起来我无法在Sybase ASE 12.5上做我想做的事。

MSSQL Server和Sybase ASE 15.x应该做所需的事情 - 希望我能够安排一些事情。不确定哪一个接受,直到我有一些工作,但我会回来接受一个答案。