当前位置:编程学习 > C#/ASP.NET >>

sqlserver死锁问题

最近遇到个非常棘手的问题,数据经常性的死锁,倒致服务器CPU资源利用率达到95%以上,郁闷!哪位大侠帮我看看!


就是下面这个存储过程倒致的,但好像没什么问题,大侠们帮忙瞧瞧!

ALTER PROC [dbo].[T_PageCut_New] 
@tbname        nvarchar(1000),      --要分页显示的表名 
@FieldKey      nvarchar(1000),      --用于定位记录的主键(惟一键)字段,可以是逗号分隔的多个字段,一定要有
@PageCurrent   int=1,               --要显示的页码 
@PageSize      int=10,              --每页的大小(记录数) 
@FieldShow     nvarchar(4000)= '*', --以逗号分隔的要显示的字段列表,如果不指定,则显示所有字段 
@FieldOrder    nvarchar(1000)= ' ', --以逗号分隔的排序字段列表,可以指定在字段后面指定DESC/ASC用于指定排序顺序 
@Where         nvarchar(4000)= ' ', --查询条件 
@PageCount     int   OUTPUT         --总记录数 
AS
set nocount on 
declare @strSQL nvarchar(4000) -- 主语句 
SET  @FieldOrder=' ORDER BY '+LTRIM(@FieldOrder) 
SET  @Where=' WHERE ('+@Where+')' 
    
--如果@PageCount为NULL值,则计算总页数(这样设计可以只在第一次计算总页数,以后调用时,把总页数传回给存储过程,避免再次计算总页数) 
--IF @PageCount IS NULL 
--BEGIN 
DECLARE  @sql  nvarchar(4000) 
SET   @sql='SELECT  @PageCount=COUNT(*) FROM '+@tbname + @Where 
    EXEC  sp_executesql   @sql,N'@PageCount  int  OUTPUT ',@PageCount OUTPUT 
--SET   @PageCount=(@PageCount+@PageSize-1)/@PageSize 
--END 
--计算分页显示的TOPN值 
DECLARE @TopN int  --值会变
DECLARE @TopN1 int --当前页及之前的所有页的记录总和
DECLARE @TopN2 int
SELECT  @TopN=@PageSize,@TopN1=@PageCurrent*@PageSize,@TopN2=@TopN1-@TopN
         
--第一页直接显示 
IF  @PageCurrent=1 
EXEC('SELECT TOP '+ @TopN + @FieldShow+' FROM '+ @tbname + @Where + @FieldOrder) 
ELSE 
BEGIN 
--生成主键(唯一键)处理条件 
    DECLARE @s nvarchar(1000) --主健
SELECT  @s=@FieldKey 
--执行查询 
    EXEC (' SELECT Top '+@TopN+' '+@FieldShow +' FROM '+@tbname + @Where + ' and '+@s+' not in (select top '+@TopN2+' '+@s+' from '+@tbname + @Where + @FieldOrder+') '+ @FieldOrder)
END
set nocount off --------------------编程问答-------------------- 帮你顶啊。 --------------------编程问答-------------------- 现成的
补充:.NET技术 ,  ASP.NET
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,