トップ回答者
ストアド

質問
-
ご教授お願い致します。
データベースをMicrosoftSQLserver2008で
システムを構築を考えていますが
以下の点が発生した場合、皆様は
どのように設定されているのかお尋ねしたいです。ユーザーに上述のデータベースを提供し
稼働始めた後に、ユーザーからテーブルの変更依頼が
あった場合(例えば列の追加または削除)に
ストアドプロシージャでその該当テーブルを使用して
いた場合、利用している該当テーブルを一件づつ
探して、直していかないといけないのですか?
それとも、テーブルを変更したら自動的になおしてくれる
ツールがありますか?
皆様のご回答をお願い致します。以上
回答
-
大変ですね。私はそういう目にあったことはありませんが、もしそういうことがおきたら、データベースをまるごとスクリプトに出力して、変更したテーブル名で検索して影響のあるオブジェクトを探し、定義を書き直すと思います。スクリプトに出力する機能は SSMS についていて、ヘルプにやり方が載ってます。
スクリプトを生成する方法
http://msdn.microsoft.com/ja-jp/library/ms178078.aspxSQL Server が自動で直してくれることはないと思います。テーブル スキーマの変更により実行したらエラーになるオブジェクトを探してくれるようなツールはどこかで売っているかもしれませんが、勝手に直してくれることは期待しないほうがよいと思いますよ。
この辺で売っているかもしれません。
RedGate Software
http://www.red-gate.com/products/SQL_Refactor/index.htm
Please mark the thread as Answered when an answer resolves your problem. 回答が得られたら、もらった回答の [回答済み] ボタンをクリックしてスレッドを回答済みにしましょう- 回答としてマーク zeak01 2010年9月2日 0:03
すべての返信
-
大変ですね。私はそういう目にあったことはありませんが、もしそういうことがおきたら、データベースをまるごとスクリプトに出力して、変更したテーブル名で検索して影響のあるオブジェクトを探し、定義を書き直すと思います。スクリプトに出力する機能は SSMS についていて、ヘルプにやり方が載ってます。
スクリプトを生成する方法
http://msdn.microsoft.com/ja-jp/library/ms178078.aspxSQL Server が自動で直してくれることはないと思います。テーブル スキーマの変更により実行したらエラーになるオブジェクトを探してくれるようなツールはどこかで売っているかもしれませんが、勝手に直してくれることは期待しないほうがよいと思いますよ。
この辺で売っているかもしれません。
RedGate Software
http://www.red-gate.com/products/SQL_Refactor/index.htm
Please mark the thread as Answered when an answer resolves your problem. 回答が得られたら、もらった回答の [回答済み] ボタンをクリックしてスレッドを回答済みにしましょう- 回答としてマーク zeak01 2010年9月2日 0:03
-
おそらく手動で修正していくしかありません。列名の変更ぐらいであれば自動的にストアドプロシージャの変更ぐらいはできそうですが、列の型変更や列名の削除は関連するロジックをどう修正してよいのかわからず、追加もどこにどう反映してよいのか判断がつかないため、自動的なストアドプロシージャの修正は原理的に無理でしょう。
代替案として、T4を使用してテーブルや列などの情報からストアドプロシージャを生成するようにしておけば、ある程度はカバーできるかもしれません。
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/ -
自動的になおしてくれるツールは存じませんがなおしたくなければビューやシノニムを使ってストアードプロシージャをなおさないでそのまま使う手はあるかと思います。
でも管理がややこしくなるデメリットがあります。
--------------------------------------------------------
列の追加でストアドプロシージャをなおさないといけないのは具体的にどういうプロシージャでしょうか?たいていなおさないで済むような気がしますが。
列の削除というのは、そもそも起きないような気がします。正規化が間違っていて修正する場合とかでしょうか?