2008-10-03 64 views
3

我希望能夠(有效)排序數據庫視圖 - 我知道,在一個數據庫視圖概念順序是無效的,但我有以下情形處理:如何獲得排序數據庫視圖的效果?

  • 第三方傳統的應用程序,使用select(*)FROM表名語句從數據庫表中讀取數據
  • 遺留應用是的記錄
  • 我寫,讓用戶來管理數據的應用程序的順序非常敏感表更容易,但是從表中插入和刪除自然會擾亂記錄的順序。

更改遺留應用程序中的語句以從表名字段按字段選擇(*)將解決我的問題,但不是一個選項。

所以 - 我已經設置了到其中的數據能夠以正確的順序被導出的臨時表,但是這是一個消耗資源的選擇,意味着數據是不是在傳統應用「活」和是用戶的額外工作。

我希望能夠在這些限制條件下獲得有序的表格版本。任何想法如何?


更新 - 我正在使用Sybase 12.5,但我想避免與特定的RDBMS緊密耦合的解決方案 - 它可能會改變。

我不能「按訂單」條款的視圖中添加的,因爲SQL標準中提到的this Wikipedia entry

回答

0

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

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

如果我理解這一點正確的,你可以通過以下方式解決:
1)重命名原始表
2)使用舊版應用程序查詢的表的名稱創建視圖。
3)將視圖定義爲以傳統應用程序所期望的方式對記錄進行排序的查詢。

+0

是的,我試過了 - 在我使用的RDBMS肯定不會,我認爲不是一般 – Brabster 2008-10-03 21:45:22

+0

您不必by子句以應用爲一個 - 你不能BY子句視圖應用的訂單視圖。該視圖被稱爲'tablename',並且CONTAINS'select * from new_tablename order by [whatever]'。然後,遺留應用程序會'從表名'中選擇*,並且永遠不會知道其中的差異。 – 2008-10-03 21:48:18

+0

是的,但如果您不使用TOP – albertein 2008-10-03 21:50:22

2

首先,我不得不在這種類型的項目上工作,這確實是一個婊子。節哀順變。

這裏有一點點,但如果您的DBMS支持它,也許您可​​以創建一個用戶定義的表函數,它可以從您的舊錶中進行有序選擇,然後設置您的視圖以從UDTF中進行選擇。這不是我以前做過的任何事情。

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 
0

MS SQL Server中,我們可以bastardize的標準,並創建一個視圖,例如:

SELECT TOP 100 PERCENT * FROM TABLE ORDER BY 1 

它讓我們解決這樣的問題。由於Sybase和Sql Server共享T-SQL,我認爲你很可能也會這樣做。

或者,您可以在它應按其排序的字段上設置聚簇索引。這將強制存儲順序,這將作爲「自然順序」返回。

  • 無可否認,這是一個實現細節。 SQL標準(也沒有任何特定的供應商,AFAIK)不保證沒有訂單條款的訂單...但是,嘿,如果你可以使用它,那麼你不會問。
0

跟進你們提供的信息,看起來像我不能在Sybase ASE 12.5上做我想做的事情。

MSSQL Server和Sybase ASE的15.x應該做我們所需要的 - 希望我能安排一下。我真的不確定哪一個可以接受直到我有一些工作,但我會回來接受一個答案。