コードでは、グローバルにアクセス可能な定数/ enums/etcを一度指定してから、アプリケーションから再利用することができます。これは、 '2'のような数字の代わりに 'Mazda'のような意味のある名前を使うことができます。SQL Serverで「Magic」番号を取り除く方法
SQL Serverのストアドプロシージャでも同じことを実行したいが、これを実装する最善の方法は不明である。
次のテーブルの例:(ことわざ車スキーマ):
Car ManufacturerId
350Z 1
Hilux 2
Yaris 2
ManufacturerId Name
1 Nissan
2 Toyota
ので、代わりの
SELECT * FROM Car WHERE ManufacturerId = 1 -- Nissan
を書く私たちは、
SELECT * FROM Car WHERE ManufacturerId = @Nissan
一つの制限のようなものを書きたいです私たちはメーカーの名前に頼ることができないということです。それは余分が参加し、スペルミスすることができ、文字列の比較で使用するよう
SELECT *
FROM Car c
INNER JOIN Manufacturer m ON c.ManufacturerId = m.ManufacturerId
WHERE m.Code = 'Nissan'
私はこの上のビット躊躇だ:私たちは、カラム変化しないと、このように検索された結合決して「コード」を持っていることについて考えていました。
すべてのストアドプロシージャで変数を宣言することなくこれを達成するには、どのような方法が最適ですか?
最初の提案ではおもしろいですが、2番目の提案では遅すぎます。また今度。 –
この問題では難しいのは、通常、マジックナンバーがクライアントコードの列挙型に対応していることです。ある時点で、SQLルックアップをクライアント列挙と同期させることになります。 MS SQL Serverは、ここで非常にきちんとした統合ポイントを提供しています.CLR UDFをコード化してenum値を返すことができ、基本的にランタイム・タイプの安全性が強化されています。あなたは依然としてクエリが列挙型の値の名前を取得していることを確認する必要がありますが、私は問題のこの部分を回避する方法を見つけたことはありません。 –