SQL Server の定数の欠如を「克服」するために使用されるいくつかのパターンを見てきましたが、パフォーマンスと可読性/保守性の両方の懸念を満たすものはないようです。
以下の例では、テーブルに不可欠な「ステータス」分類があると仮定すると、オプションは次のようになります。
- ハードコーディングするだけで、おそらくステータスを「コメント」するだけです
-- StatusId 87 = Loaded
SELECT ... FROM [Table] WHERE StatusId = 87;
- 州のルックアップ テーブルを使用し、このテーブルに結合して、
WHERE
句がフレンドリ名を参照するようにします。
サブクエリ:
SELECT ...
FROM [Table]
WHERE
StatusId = (SELECT StatusId FROM TableStatus WHERE StatusName = 'Loaded');
または加入
SELECT ...
FROM [Table] t INNER JOIN TableStatus ts On t.StatusId = ts.StatusId
WHERE ts.StatusName = 'Loaded';
- 定数を返す一連のスカラー UDF が定義されています。
CREATE Function LoadedStatus()
RETURNS INT
AS
BEGIN
RETURN 87
END;
その後
SELECT ... FROM [Table] WHERE StatusId = LoadedStatus();
(IMOこれはデータベースに多くの汚染を引き起こします-これはOracleパッケージラッパーでは問題ないかもしれません)
- また、値を持つ定数を行または列として保持するテーブル値関数を使用した同様のパターンは
CROSS APPLIED
、[Table]
他の SO ユーザーは、この一般的な問題をどのように解決しましたか?
編集:報奨金 - Remus の回答とコメントに従って、DBProj DDL / Schema スクリプトで $(variables) を維持するためのベスト プラクティスの方法はありますか?