0

3 つのパラメーターを受け入れるストアド プロシージャを作成しました。

@row int
,@column VARCHAR(17)
,@value int

@valueパラメータに応じて異なる列を更新するため、パラメータがテキストまたは整数のいずれかを受け入れるようにし@columnます。

お知らせ下さい

4

3 に答える 3

5

これを行わないでください。署名と名前が異なる 2 つのストアド プロシージャを作成してください。その後、パラメーターは必要なくなり、@column各ストアド プロシージャはシンプルになり、一貫して動作します。

IFs とCASEes をストアド プロシージャ定義と交換することになります。プロシージャのクエリ プランは一貫して動作するため、確実にキャッシュでき、全体でほぼ同じ行数を記述できます。

渡されたパラメーターに基づいてさまざまなクエリを実行するストアド プロシージャは、発生するのを待っているパフォーマンスの問題です。

于 2012-11-07T10:04:48.940 に答える
1

として宣言できますsql_variant

@row int,
@column VARCHAR(17),
@value sql_variant

しかし、これは悪い考えのように思えます。

于 2012-11-07T10:03:48.907 に答える
1

varchar パラメータを宣言してから、int を渡してキャストcast(@value as int)
を実行できます。これを行う別の方法は、2 つのパラメータを宣言し@value_int@value_varchar

しかし、私は@podiluskaに同意します-いくつかの設計上の問題があるように聞こえますが、本当にそれが必要ですか?

于 2012-11-07T10:05:44.207 に答える