0

2 つのテーブルとそれらのビューがあります。インラインクエリを持つ

select * from View_tbl where sector = '04'

しかし、このためのストアドプロシージャを作成すると

create proc spTest
@sector varchar(2)
as
select * from View_tbl where sector = @sector

どちらも異なる値のデータセットを返します。SP Main tbl にあるが表示されていない列も返します。

提案があればお願いします

4

2 に答える 2

1

ビューの定義が変更された場合は、ストアド プロシージャの再コンパイルが必要になる場合があります。

select *ストアド プロシージャで使用すると、列の明示的なリストにコンパイルされます。ビュー定義に対するその後の変更は、sp の定義に反映されない場合があります (他のいくつかの要因と SQL Server のバージョンによって異なります)。

select *一般に、ストアド プロシージャでは回避し、列のリストを明示的にコーディングするようにしています。これにより、再コンパイルへの依存が回避されます。

create proc spTest
    @sector varchar(2)
as
    select
        col1,
        col2,
        col3
from
    View_tbl
where
    sector = @sector
于 2012-07-09T14:01:29.410 に答える
0

私の推測では、誤って 2 つの場所に SP があり (Master を確認)、間違ったデータベースで SP を実行している可能性があります。古いバージョンの sp が横たわっている可能性があります。ソート条件テストとしてデータベースを使用してテーブルを完全に修飾することもできます。 .

于 2012-07-09T14:03:32.570 に答える