CREATE  Proc usp_Save_Char_Item_Del_E @CharID int, 
@IDList varchar(7000) = '', -- 餉薯衛(葬蝶高) 
@ChkID int = 1, 
--为什么还要这个参数?**************************
@Qry varchar(8000) = '' 
--************************************************
AS --SET NOCOUNT ON IF( @ChkID = 1 ) 
BEGIN 
SET @Qry = ' 
DELETE CharItems 
WHERE ItemUID IN (' + @IDList + ') 
AND ltrim(CharID) = ''' + CAST(@CharID AS varchar(30)) +''''--这样改试试。
END 
ELSE 
BEGIN 
SET @Qry = ' 
DELETE CharItems 
WHERE ItemUID IN (' + @IDList + ')' 
END EXEC(@Qry) IF(@@ERROR = 0) 
BEGIN 
RETURN 1 
END 
ELSE 
BEGIN 
RETURN -1 
END --SET NOCOUNT OFF GO

解决方案 »

  1.   

    CREATE  Proc usp_Save_Char_Item_Del_E 
    @CharID int, 
    @IDList varchar(7000) = '-999999999', 
    @ChkID int = 0, 

    AS 
    --SET NOCOUNT ON 
    declare @Qry varchar(8000) 
    set  @Qry=''

    IF( @ChkID =1 ) 
    SET @Qry = 'DELETE CharItems WHERE ItemUID IN (' + @IDList + ') AND CharID = ' + CAST(@CharID AS varchar(30)) 
    ELSE 
    SET @Qry = 'DELETE CharItems WHERE ItemUID IN (' + @IDList + ')'  EXEC(@Qry)  IF(@@ERROR = 0) 
    RETURN 1 
    ELSE 
    RETURN -1 
    --SET NOCOUNT OFF GO
      

  2.   

    CREATE  Proc usp_Save_Char_Item_Del_E @CharID int, 
    @IDList varchar(7000) = '', -- 餉薯衛(葬蝶高) 
    @ChkID int = 1, 
    @Qry varchar(8000) = '' 
    AS --SET NOCOUNT ON IF( @ChkID = 1 ) 
    BEGIN 
    SET @Qry = ' 
    DELETE CharItems 
    WHERE ItemUID IN (' + @IDList + ') 
    AND ltrim(CharID) = ''' + CAST(@CharID AS varchar(30)) +''''--这样改试试。
    END 
    ELSE 
    BEGIN 
    SET @Qry = ' 
    DELETE CharItems 
    WHERE ItemUID IN (' + @IDList + ')' 
    END EXEC(@Qry) IF(@@ERROR = 0) 
    BEGIN 
    RETURN 1 
    END 
    ELSE 
    BEGIN 
    RETURN -1 
    END --SET NOCOUNT OFF GO试一下
      

  3.   

      直接看不出来,
      可以用sp_who查看被锁的进程,,再管理--->活动监视器,
    查看对应进程执行的代码,,可以看出是什么原因,上面并发环境下造成的锁,
    感觉一般用begin tran ,commit tran控制很少出这种问题
      

  4.   

    我都试了一下不过不是有这个问题,这是日志提示2009-05-02 22:31:28 err=-1, [Microsoft][ODBC SQL Server Driver][SQL Server]事务(进程 ID  107)与另一个进程已被死锁在  lock 资源上,且该事务已被选作死锁牺牲品。请重新运行该事务。, SQL STATE: 40001, NATIVE ERROR: 1205 (0x4B5)2009-05-02 22:31:28 ::SaveCharacter 1503 哎哟 ret=1, qerr=-1, {?=call Usp_Save_Char_Item_Del_E(1503,'2685665061896257536')}
      

  5.   

    进程     是批TSQL命令
    107     Usp_Save_Char_Item_Mod_E;1
    110     Usp_Save_Char_Item_Del_E;1