0

同じ構造の複数のテーブルと関連する名前を持つデータベース(SQLServer)にクエリを実行しようとしています。

[TABLE 01 $TRANSACTIONS]
[TABLE 02 $TRANSACTIONS]
...
[TABLE (n) $TRANSACTIONS]

一度に1つのテーブルで目的のレコードを返すクエリがあり、複数のテーブルを手動で選択できます

SELECT {QUERY01} FROM [TABLE 01 $TRANSACTIONS]
UNION
SELECT {QUERY02} FROM [TABLE 02 $TRANSACTIONS]
...
SELECT {QUERY(n)} FROM [TABLE (n) $TRANSACTIONS]

必要なテーブル名を代用する一般的なクエリは約 200 行で、ROWNUMBER()/PARTITION BY 関数、関連するテーブルへの複数の結合、およびいくつかの順序付けが含まれます。

時間が経つにつれて、新しいテーブルが追加され、nが変更されます。

nの任意の値に対して、すべてのnテーブルからレコードの UNION を選択する方法を誰かが提案できますか?

注: nテーブルのリストは、sysobjects テーブルに対するクエリで簡単に取得できます。

SELECT Name FROM sysobjects
WHERE Type = 'U'
AND Name LIKE '%$TRANSACTIONS'
ORDER BY Name
4

2 に答える 2

1

私の知る限り、sysobjects クエリを使用して新しいビュー定義を定期的に生成することをお勧めします。

テーブルが変更されたときにこのビューを再生成する手順を実行する DDL トリガーを作成できるかもしれませんが、よくわかりません。このような DB 設計は難破船です。

于 2010-02-14T23:24:51.510 に答える
0

sysobjects クエリを介してカーソルを移動し、SQL ステートメントを作成できます。その後、sp_executesql を呼び出して実行できます。経験上、これらは A$$ でデバッグするのが面倒だと言えます。また、このソリューションは、ベンダーのアップグレードによって崩壊することも予想されます。幸運を。

于 2010-02-15T19:25:49.720 に答える