关于存储过程中调用存储过程的问题

cnjack 2008-12-10 11:00:24
如下所示:
create table #tt(style_code nvarchar(10))
insert into #tt exec p_xx @year=2006,@month=10
select * from #tt
drop table #tt

注意:如果修改了p_xx(被調用存儲過程),則以下兩種調用情況,需要先直接調用一下p_xx存儲過程,然后才可以正常調用p_xx存儲過程的結果執行其它操作,否則,會出現錯誤:插入錯誤: 資料行名稱或提供的數值數量與資料表定義不相符。
1.查詢分析器中有調用p_xx存儲過程的結果作其它處理的情況:
處理方法:先直接調用P_xx存儲過程一次(如exec p_xx @year=2006,@month=10),然後才可正常使用本存儲過程返回的結果

2.程序中調用的存儲過程中嵌套調用p_xx存儲過程的結果作其它處理的情況::
處理方法:程序中直接調用P_xx存儲過程一次(如exec p_xx @year=2006,@month=10),然後才可正常使用本存儲過程返回的結果
說明:當修改了p_xx后,在查詢分析器中也執行了exec p_xx @year=2006,@month=10,也不能解決以上情況2的問題.必須在程序中直接調用P_xx存儲過程一次,然後才可正常使用本存儲過程返回的結果


問:
1.出現這種情況的原因是什么?
2.那么,有沒有什么方法,在修改了p_xx(被調用存儲過程)后,以上兩種調用情況中,不需要執行exec p_xx @year=2006,@month=10,即可正常調用p_xx返回的結果呀?
...全文
81 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
cnjack 2008-12-26
  • 打赏
  • 举报
回复
最近較忙,遲點再年,先結貼
cnjack 2008-12-10
  • 打赏
  • 举报
回复
不是不會調用,而是修改了嵌套調用p_xx存儲過程后,在查詢分析器中使用p_xx返回的結果和程序中使用p_xx返回的結果時出錯,需要我上面說的那兩種處理方法后,才可正常調用.
快乐_石头 2008-12-10
  • 打赏
  • 举报
回复
select * into 表 from openrowset( 'SQLOLEDB', 'sql服务器名'; '用户名'; '密码','exec 存儲過程') 
dawugui 2008-12-10
  • 打赏
  • 举报
回复
看不懂需求,帮顶.
fcuandy 2008-12-10
  • 打赏
  • 举报
回复
或者执行前先执行
DBCC FREEPROCCACHE

不过可能会对性能造成影响。
fcuandy 2008-12-10
  • 打赏
  • 举报
回复
应该是缓存的问题。

试一下改存储过程为

WITH RECOMPILE
limin4506 2008-12-10
  • 打赏
  • 举报
回复
修改存储过程,可能是第一次exec proc 才会编译吧

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧