0

我有两张桌子和一个视图。有内联查询

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

我的猜测是您偶然在两个地方有 SP(检查 Master)并且它在错误的数据库中执行 SP 可能是您的 sp 的旧版本正在放置...也许完全限定您的表与数据库作为排序术语测试.

于 2012-07-09T14:03:32.570 回答