+ -
当前位置:首页 → 问答吧 → 存储过程中利用游标select总判断,执行慢

存储过程中利用游标select总判断,执行慢

时间:2011-12-10

来源:互联网

以下存过过程,执行特别慢,请大家帮忙看看,数据量大约1万条左右。

ALTER PROCEDURE [dbo].[BatchImportChkReptBabyInfo2]
@CustomerDt JetImportCustomers READONLY
AS

BEGIN
--****************定义临时表,用于返回用****************
  CREATE TABLE #TEMPCUSTOMER (  
  VAR_EXISTTYPE INT NULL)
  --****************定义变量****************
  --联系方式1
  DECLARE
  @VAR_MotherTel VARCHAR(20)
  = NULL ;
  --联系方式2
  DECLARE
  @VAR_FatherTel VARCHAR(20)
  = NULL ;
  --联系方式3
  DECLARE
  @VAR_OtherTel VARCHAR(20)
  = NULL ;
  DECLARE
  @VAR_EXISTTYPE INT
  = 0 ;
  DECLARE
  @VAR_EXISTCNT INT
  = 0 ;  
  DECLARE
  @VAR_EXISTTOTALCNT INT
  = 0 ;  
  
  DECLARE CUSTOMER_CURSOR CURSOR FOR
  SELECT MOBILEPHONE1,MOBILEPHONE2,MOBILEPHONE3
  FROM KH_QZKH
  OPEN CUSTOMER_CURSOR
  FETCH NEXT FROM CUSTOMER_CURSOR
  INTO @VAR_MotherTel,@VAR_FatherTel,@VAR_OtherTel
  WHILE (@@FETCH_STATUS = 0)
  BEGIN
  IF (ISNULL(@VAR_MotherTel,'') <> '')
  BEGIN
  SELECT @VAR_EXISTCNT = count(CUSTOMERUID)
  FROM KH_QZKH
  WHERE ISDEL = 0
  AND (MOBILEPHONE1 = @VAR_MotherTel)
  IF (@VAR_EXISTCNT > 0)
  BEGIN
  SET @VAR_EXISTTYPE = 11
  ;
  --返回值
  SET @VAR_EXISTTOTALCNT = @VAR_EXISTTOTALCNT + 1
  ;
  END  
  END  
  --插入到临时表中
  INSERT INTO #TEMPCUSTOMER
  VALUES (@VAR_EXISTTYPE)
  FETCH NEXT FROM CUSTOMER_CURSOR
  INTO @VAR_MotherTel,@VAR_FatherTel,@VAR_OtherTel
  END
  CLOSE CUSTOMER_CURSOR
  DEALLOCATE CUSTOMER_CURSOR
  --返回@CustomerDt
  SELECT 
  VAR_EXISTTYPE AS EXISTTYPE
FROM #TEMPCUSTOMER
  DROP TABLE #TEMPCUSTOMER 
  
  return @VAR_EXISTTOTALCNT;
END

作者: iamheyjudy   发布时间: 2011-12-10

你写的太多,懒得看,不如说下你的需求。

作者: ssp2009   发布时间: 2011-12-10

用游标是不会快到哪里去的。

作者: fredrickhu   发布时间: 2011-12-10

想办法别用游标吧,游标最慢了,没循环一次相当于select一次表

作者: koumingjie   发布时间: 2011-12-10

业务如下:从表A中取得电话字段到表B中的三个电话字段去匹配,只要表B中有一个电话匹配,即输出该条,以此A表中电话循环。*电话字段不是两表中的主键

作者: iamheyjudy   发布时间: 2011-12-10