3

データベースビューを(効果的に)並べ替えることができるようにしたい-データベースビューでの概念的な順序が無効であることはわかっていますが、次のシナリオで対処する必要があります。

  • select(*)fromtablenameステートメントを使用してデータベーステーブルからデータを読み取るサードパーティのレガシーアプリケーション
  • レガシーアプリケーションは、レコードの順序に非常に敏感です
  • ユーザーがテーブル内のデータをより簡単に管理できるようにするために作成したアプリケーションですが、テーブルへの挿入と削除により、レコードの順序が自然に混乱します。

レガシーアプリケーションのステートメントを変更して、テーブル名からフィールドごとに(*)を選択すると、問題は解決しますが、オプションではありません。

つまり、データを正しい順序でエクスポートできるステージングテーブルを設定しましたが、これはリソースを大量に消費するオプションであり、データがレガシーアプリケーションで「ライブ」ではなく、ユーザー。

これらの制約のあるテーブルの注文バージョンを入手できるようにしたいと思います。どのようにアイデアはありますか?


更新-Sybase12.5を使用していますが、特定のRDBMSと緊密に結合されたソリューションを避けたいのですが-変更される可能性があります。

このウィキペディアのエントリで参照されているSQL標準のため、ビューに「orderby」句を追加できません

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

これを正しく理解している場合は、次の方法で解決できます
。1)元のテーブルの名前を変更する
2)レガシーアプリがクエリするテーブルの名前でビューを作成する。
3)ビューを、レガシーアプリが期待する方法でレコードを並べ替えるクエリとして定義します。

于 2008-10-03T21:42:45.327 に答える
0

皆さんから提供された情報をフォローアップすると、SybaseASE12.5でやりたいことができないようです。

MSSQLServerとSybaseASE15.xは、必要なことを実行する必要があります。うまくいけば、何かを手配できるようになります。何かが機能するまで、どちらを受け入れるかはよくわかりませんが、戻ってきて答えを受け入れます。

于 2008-10-06T19:29:38.590 に答える
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 に答える