我有两张桌子和一张视图。 有内联查询
select * from View_tbl where sector = '04'
但是当我为此
创建存储过程时create proc spTest
@sector varchar(2)
as
select * from View_tbl where sector = @sector
都返回具有不同值的数据集。 SP返回那些在Main tbl但不在视图中的列。
请提出任何建议
答案 0 :(得分:1)
如果视图的定义已更改,则可能需要重新编译存储过程。
在存储过程中使用select *
时,会将其编译为明确的列列表。对视图定义的后续更改可能不会反映在sp的定义中(取决于其他一些因素和SQL Server的版本)。
通常,我尝试避免存储过程中的select *
并明确地编写列列表。这避免了对重新编译的依赖。
create proc spTest
@sector varchar(2)
as
select
col1,
col2,
col3
from
View_tbl
where
sector = @sector
答案 1 :(得分:0)
我的猜测是你在两个地方偶然发现了SP(检查Master)并且它在错误的数据库中执行SP可能是你的sp的旧版本...可能完全限定你的表与数据库as排序期限测试。