当我尝试执行此存储过程时,它给出了超时过期错误,这是我的存储过程
ALTER procedure [dbo].[sp_rptExpMed]
(
@Stocname as varchar(100),
@date varchar(40),
@Mode int
)
as
begin
if @Mode=1
begin
select DISTINCT Em.*,M.DrugName,m.Category
--,rate
from ExpiryMed Em inner join medicinaldrugs M on Em.Drugid=M.drugId
LEFT join Purchase22011_2012 P on em.DrugID = P.ItemID and Em.batch=p.BatchNo
order by M.DrugName,Em.Batch
end
if @Mode=2
begin
select DISTINCT Em.*,M.DrugName,m.Category
--,rate
from ExpiryMed Em inner join medicinaldrugs M on Em.Drugid=M.drugId
LEFT join Purchase22011_2012 P on em.DrugID = P.ItemID and Em.batch=p.BatchNo
where ExpDate<@date
order by M.DrugName,Em.Batch
end
end
这有什么不对。任何人都可以建议我一种方法来避免此超时过期错误
答案 0 :(得分:3)
可能存在这样的情况:您在过程中查询的表由于打开/未提交的事务而持有锁。尝试使用NOLOCK
表提示以及表名称,如
select DISTINCT Em.*,M.DrugName,m.Category
from ExpiryMed Em WITH (NOLOCK)
inner join medicinaldrugs M WITH (NOLOCK) on Em.Drugid=M.drugId
LEFT join Purchase22011_2012 P WITH (NOLOCK) on em.DrugID = P.ItemID
and Em.batch=p.BatchNo
order by M.DrugName,Em.Batch
您也可以将事务隔离级别设置为READ UNCOMMITTED