計算列で使用されるスカラー関数、関数を更新する最もクリーンな方法は何ですか?


10

データベースのスカラー関数を更新したい。この関数は、キーテーブルのいくつかの計算列に使用されるため、更新しようとすると依存関係エラーが発生します。列を明示的に削除し、関数を更新して列を再度追加できますが、余計な手間をかけずに列の順序が変更され、他の意図しない結果が生じる可能性があります。もっときれいな方法はあるのだろうか?


4
実際の関数を呼び出すダミー関数を作成することで、これを部分的にのみ解決しました。もちろん、シグネチャが変更された場合、それは再び終わりです。

3
残念ながら、これを行うための「魔法」または「よりクリーンな」方法はないと思います。関数を変更する必要がある場合-列を削除し、関数を変更して、すべての列を再度追加する必要があります。これを回避する方法はありません。
marc_s 2012年

@marc_sまあ、これは一見の価値があります。この辺りにはたくさんの賢い人がいます:)
robertc

上記のコメントに同意します。SYNONYMがここでいくつかのヘルプを提供するスコープがあったと思われますが(計算された列でSYNONYMを参照)、一度作成したシノニムを変更して別のオブジェクトに「リダイレクト」することはできません。
AdaTheDev 2012年

1
それでも、CLR UDTの定義を更新するほど痛みを伴うことはありません(変更がメソッドの微調整であり、ストレージの表現にまったく影響を与えない場合でも)
Martin Smith

回答:


2

これはもっと手間がかかるかもしれませんが、(おおよそ)あなたが求めているものを得るはずです:

1-メインテーブルと更新された関数からPKのみを含む新しいテーブルを作成します。

2-古い列を削除します

3-古いテーブルの名前を次のように変更します TableName_Base

4- VIEWメインテーブルをルックアップテーブルに結合するを作成します。フィールドを表示したい順に並べます。元のテーブル名が何であれ、ビューに名前を付けます。

これは、潜在的にいくつかの問題を作成するINSERTSUPDATES、ビュー経由でアクセスすることがありますので、しかし。これに対処するには、ビューをバイパスして、テーブルに直接挿入します。


これは、作業が増え、列を削除して再度追加するのと同じレベルのリスクのようです。
robertc

1
@robertcこれが高トランザクション環境であれば、混乱は少なくなりますが、それでもかなり厄介です。
JNK、2012年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.