2016-09-27 5 views
0

自分のニーズに合わせて変更する方法がない独自のデータベースを読んでいる状況です。華麗な建築家はひどく正規化されたデータベースを持っており、Devでサーバ​​ーをセットアップしたとき、DevとProdの間の主キー(整数の識別値)と一致するとは思わなかった。ProdとDev間のハードコーディングされた値の同期

このような状況では、ハードコードされた値を使用している場所でクエリを記述する必要がありました(例:where productid = 12345)。 12345は、デベロッパーズ・プロダクションでは必ずしも同じ製品ではありません。これは、2組のSQLコードを維持することを意味します。そして、それらは潜在的なエラーのための高い危険である(正しいスクリプトを配備しない)。私はDevでのテストの標準を好み、全く同じコードをProductionに配備することを好みます。これによりリスクが最小限に抑えられます。

注:私はこの例では単純化していますが、アーキテクチャがどのように設計されているかを問わず、クエリを実行するためにはハードコーディングが必要です。 (私のblashpemyには申し訳ありません)。

誰かがあなたがSQL Server Token Replacementでこれを行うことができると言いましたが、オンラインではあまりにも多くを見つけることはできません。どうやら、必要な値(productidの)をSQLファイルに設定して、サーバーに展開して、tokensを正しいハードコード値に置き換えてください。

私はちょうどこれを始めるためのガイダンスを探しています。

+1

単にあなたがあなたのデータベースに必要なフィールドと値を持つテーブルを作成します。それぞれの環境IDをこのテーブルに挿入します。このテーブルから値を取り出すクエリを記述します。 – techspider

答えて

1

あなたは、パラメータテーブルでこの問題を回避することができます:

Parameter Value 
ProductId 12345 

とパラメータを取得するための機能:

WHERE productid = (SELECT Parameter('ProductId')) 
+0

ありがとうございました...興味深いことに、私はそれを調べなければならないでしょう – logixologist

+1

これは、おそらく最も投資の少ないベストソリューションです。私は同様のものに直面していましたが、それらはGUIDキーであり、アイデンティティではありませんでした...だから私は弾丸にぶつかり、実際にデータベース全体でキーを同じにするのに必要なすべての更新を行うスクリプトを書いた。これは、問題を今後も解消する大きな一回費用でした。しかし、それを行うことは必ずしも実現可能ではありません。そして、これは非常に特殊なケースでした。 – pmbAustin

関連する問題