ALTER procedure [dbo].[P_InsertChatMsg]
@SUserID decimal,
@RUserID decimal,
@SContent varchar(8000),
@WordTime datetime,
@ObjectSend int
ASDeclare @UID  bigint
   Select @UID=[UID] from TB_Users where (ConnService=Cast(@SUserID as varchar) or ClientID=Cast(@SUserID as varchar)) and (ConnService=Cast(@RUserID as Varchar) or ClientID=Cast(@RUserID as Varchar)) and GoneTime is null  
if @UID<>0
   Begin
      Insert Into TB_MsgTemp0 (SUserID,RUserID,SContent,WordTime,MsgID,ObjectSend,[UID]) 
      Values (@SUserID,@RUserID,@SContent,@WordTime,@UID,@ObjectSend,@UID) 
   End注:  存储过程访问比较频繁

解决方案 »

  1.   

    本帖最后由 libin_ftsafe 于 2008-10-17 14:27:24 编辑
      

  2.   


    ALTER procedure [dbo].[P_InsertChatMsg] 
    @SUserID decimal, 
    @RUserID decimal, 
    @SContent varchar(8000), 
    @WordTime datetime, 
    @ObjectSend int 
    AS Declare @UID  bigint     Select @UID=[UID] 
        from TB_Users 
        where (ConnService=Cast(@SUserID as varchar) or ClientID=Cast(@SUserID as varchar)) 
          and (ConnService=Cast(@RUserID as Varchar) or ClientID=Cast(@RUserID as Varchar)) and GoneTime is null  
        
        if exists(Select 1 from TB_Users 
                 where (ConnService=Cast(@SUserID as varchar) or ClientID=Cast(@SUserID as varchar)) 
                   and (ConnService=Cast(@RUserID as Varchar) or ClientID=Cast(@RUserID as Varchar)) and GoneTime is null)    Begin 
            Insert Into TB_MsgTemp0 (SUserID,RUserID,SContent,WordTime,MsgID,ObjectSend,[UID]) 
            Values (@SUserID,@RUserID,@SContent,@WordTime,@UID,@ObjectSend,@UID) 
        End --只能这样咯.看高手
      

  3.   

    Values (@SUserID,@RUserID,@SContent,@WordTime,@UID,@ObjectSend,@UID) @UID  没了?
      

  4.   

    直接INSERT,不必执行之前的查询;如果查询结果集为空,自然没有数据INSERT到目标表中。
      

  5.   

    ALTER procedure [dbo].[P_InsertChatMsg] 
    @SUserID decimal, 
    @RUserID decimal, 
    @SContent varchar(8000), 
    @WordTime datetime, 
    @ObjectSend int 
    AS Declare @UID  bigint 
      Select @UID=[UID] from TB_Users where ConnService in (Cast(@SUserID as varchar),Cast(@RUserID as Varchar)) or ClientID in(Cast(@SUserID as varchar),Cast(@RUserID as Varchar)) and GoneTime is null  
    if @UID <>0 
      Begin 
          Insert Into TB_MsgTemp0 (SUserID,RUserID,SContent,WordTime,MsgID,ObjectSend,[UID]) 
          Values (@SUserID,@RUserID,@SContent,@WordTime,@UID,@ObjectSend,@UID) 
      End 
      

  6.   

    ALTER procedure [dbo].[P_InsertChatMsg] 
    @SUserID decimal, 
    @RUserID decimal, 
    @SContent varchar(8000), 
    @WordTime datetime, 
    @ObjectSend int 
    AS 
    BEGIN
        select 
            @SUserID,@RUserID,@SContent,@WordTime,[UID],@ObjectSend,[UID]
        from 
            TB_Users 
        where 
            (ConnService=Cast(@SUserID as varchar) or ClientID=Cast(@SUserID as varchar)) and (ConnService=Cast(@RUserID as Varchar) or ClientID=Cast(@RUserID as Varchar)) and GoneTime is null)
    END
    GO 
      

  7.   

    先要拿到 TB_Users  里面的  UID 的值
      

  8.   

    --TRY
    ALTER procedure [dbo].[P_InsertChatMsg] 
    @SUserID decimal, 
    @RUserID decimal, 
    @SContent varchar(8000), 
    @WordTime datetime, 
    @ObjectSend int 
    AS 
    Declare @UID  bigint 
     if exists( Select [UID] from TB_Users where ConnService in (Cast(@SUserID as varchar),Cast(@RUserID as Varchar)) or ClientID in(Cast(@SUserID as varchar),Cast(@RUserID as Varchar)) and GoneTime is null)  
          Insert Into TB_MsgTemp0 (SUserID,RUserID,SContent,WordTime,MsgID,ObjectSend,[UID]) 
          Values (@SUserID,@RUserID,@SContent,@WordTime,@UID,@ObjectSend,@UID) 
     
      

  9.   


    ALTER procedure [dbo].[P_InsertChatMsg] 
    @SUserID decimal, 
    @RUserID decimal, 
    @SContent varchar(8000), 
    @WordTime datetime, 
    @ObjectSend int 
    AS 
    begin
    insert TB_MsgTemp0 (SUserID,RUserID,SContent,WordTime,MsgID,ObjectSend,[UID])
    select @SUserID,@RUserID,@SContent,@WordTime,@UID,@ObjectSend,[UID]
    from TB_Users
    where  GoneTime is null
    and     [UID]!=0
    and  (ConnService=Cast(@SUserID as varchar) or ClientID=Cast(@SUserID as varchar))
    and (ConnService=Cast(@RUserID as Varchar) or ClientID=Cast(@RUserID as Varchar))
    end 
      

  10.   

    To:  wufeng4552  @UID  值为空了     这里要用的  :  Values (@SUserID,@RUserID,@SContent,@WordTime,@UID,@ObjectSend,@UID) TO:  libin_ftsafe    数据没有插入到  
          TB_MsgTemp0  表
      

  11.   

    速度是很慢呀,  cpu 109  reads  2390
      

  12.   


    TB_Users 的数据量有多大?都有些什么索引?
      

  13.   

    --TRY
    ALTER procedure [dbo].[P_InsertChatMsg] 
    @SUserID decimal, 
    @RUserID decimal, 
    @SContent varchar(8000), 
    @WordTime datetime, 
    @ObjectSend int 
    AS 
    Declare @UID  bigint 
     if exists( Select [UID]=[UID] from TB_Users where ConnService in (Cast(@SUserID as varchar),Cast(@RUserID as Varchar)) or ClientID in(Cast(@SUserID as varchar),Cast(@RUserID as Varchar)) and GoneTime is null)  
          Insert Into TB_MsgTemp0 (SUserID,RUserID,SContent,WordTime,MsgID,ObjectSend,[UID]) 
          Values (@SUserID,@RUserID,@SContent,@WordTime,@UID,@ObjectSend,@UID) 
     
      

  14.   

    TB_Users   26万     索引 ConnService,ClientID
      

  15.   

    --更正
    ALTER procedure [dbo].[P_InsertChatMsg] 
    @SUserID decimal, 
    @RUserID decimal, 
    @SContent varchar(8000), 
    @WordTime datetime, 
    @ObjectSend int 
    AS Declare @UID  bigint 
      Select @UID=[UID] from TB_Users where ConnService in (Cast(@SUserID as varchar),Cast(@RUserID as Varchar)) or ClientID in(Cast(@SUserID as varchar),Cast(@RUserID as Varchar)) and GoneTime is null          Insert Into TB_MsgTemp0 (SUserID,RUserID,SContent,WordTime,MsgID,ObjectSend,[UID]) 
              select @SUserID,@RUserID,@SContent,@WordTime,@UID,@ObjectSend,@UID where @UID<>0
      

  16.   


    ALTER procedure [dbo].[P_InsertChatMsg] 
    @SUserID decimal, 
    @RUserID decimal, 
    @SContent varchar(8000), 
    @WordTime datetime, 
    @ObjectSend int 
    AS Declare @UID  bigint 
      Select @UID=[UID] from TB_Users where ConnService in (Cast(@SUserID as varchar),Cast(@RUserID as Varchar)) or ClientID in(Cast(@SUserID as varchar),Cast(@RUserID as Varchar)) and GoneTime is null          Insert Into TB_MsgTemp0 (SUserID,RUserID,SContent,WordTime,MsgID,ObjectSend,[UID]) 
              select @SUserID,@RUserID,@SContent,@WordTime,@UID,@ObjectSend,@UID where @UID<>0
    速度还要更慢些
      

  17.   

    是复合索引吗?很明显你的查询没有用到你的索引试一下分别在ConnService和ClientID各建一个索引。