新版本的 SQL SERVER 性能这么低吗?

aroc_lo 2013-04-01 11:33:20
我这里有一台旧的服务器,配置大致如下:
CPU:Intel Xeon CPU E5335 * 2 (8CPUs)
内存:4GB
硬盘:143GB*3 (Raid5)
系统:windows server 2003 英文标准版+SP2
数据库:SQL2000 + SP4

查询某一个数据表内的某一个存储过程。需要100秒左右

--------

后来买了一台新服务器,配置大致如下:
CPU:Intel Xeon CPU E7-4807 *2 (24CPUs)
内存:32GB
硬盘:300GB*5 (Raid6)
系统:windows server 2008 R2 中文标准版+SP1
数据库:SQL2008 R2 + SP2

查询之前的那个存储过程,需要93秒左右。

----------------

后来。使用SQL2008自带的 SQL Server Profiler 及 数据库引擎优化顾问 进行分析。
没有发现,其对这个存储过程有什么优化建议

----------------

我是想问,难道是我有什么地方作过不对,还是有什么地方有问题。
硬件环境可能说有了极大的改善,但是数据库的查询效果却是非常不尽如人意。
...全文
523 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 15 楼 aroc_lo 的回复:
引用 14 楼 c_enhui 的回复: 这样的过程,要是能快了,就怪了。 哦,我想说的,不是这个存储过程是否优质, 而是想说。硬件环境得到的极大的改善。执行同样的存储过程在速度上却只能得到很小很小的增加。 这与硬件的投入太不成比例了。 总感觉好象作生意一样。 投入10万元,每月能赚5000元, 现面投入 100万元,每月只能赚 6000元。
一个人很口渴,你却给他吃馒头,请问给他吃小馒头跟大馒头有什么区别吗?
Q315054403 2013-04-02
  • 打赏
  • 举报
回复
真是牛人设计的系统。。。
shoppo0505 2013-04-02
  • 打赏
  • 举报
回复
就你的代码而言,数据库需要的是快速的IO,但是你升级的配置相比之前的电脑,正好没有能够明显提高IO性能。你新电脑的浮点运算能力提高不少,但是你贴出来的代码中,只有极少的运算代码。 你的老电脑升级个SSD,肯定有质的飞跃。 就目前而言,你要么升级SSD,要么优化代码,当然两者都作是最好的。
aroc_lo 2013-04-02
  • 打赏
  • 举报
回复
引用 14 楼 c_enhui 的回复:
这样的过程,要是能快了,就怪了。
哦,我想说的,不是这个存储过程是否优质, 而是想说。硬件环境得到的极大的改善。执行同样的存储过程在速度上却只能得到很小很小的增加。 这与硬件的投入太不成比例了。 总感觉好象作生意一样。 投入10万元,每月能赚5000元, 现面投入 100万元,每月只能赚 6000元。
弘恩 2013-04-02
  • 打赏
  • 举报
回复
这样的过程,要是能快了,就怪了。
黄_瓜 2013-04-02
  • 打赏
  • 举报
回复
数据库在like方面很弱的,模糊匹配还是从程序段下手吧。
aroc_lo 2013-04-02
  • 打赏
  • 举报
回复
硬件环境提高了很多,有没有办法让SQL SERVER更快些。
  • 打赏
  • 举报
回复
每个SQL SERVER新版版会有些性能方式提升,但是总体来说,性能差跟SQL SERVER或者SQL SERVER的不同版本没有必然的联系,要不你试一下把它移植到11g Release 2 (11.2),我保证你一样的慢。 数据库引擎优化顾问不是万能的,不能代替DBA的优化。 把你的SP 跟SP具体的执行计划发出来,这样或者才能帮到你。
guguda2008 2013-04-01
  • 打赏
  • 举报
回复
无语,我觉得我无法说服你做更靠谱的测试。
szm341 2013-04-01
  • 打赏
  • 举报
回复
那要看你存储过程内部数据是怎么处理的了,语句有没有优化的空间
  • 打赏
  • 举报
回复
引用 10 楼 aroc_lo 的回复:
引用 8 楼 SQL_Beginner 的回复: 另外,我发生你的很多条件 都用LIKE, 比如 B.CustomerNo LIKE '%'+@CustomerNo+'%' ,必须要用LIKE吗? 可以用=吗,比如, B.CustomerNo =@CustomerNo 其它象 LIKE 我也想不用。 可是,当一个查询,是有很多条件的,, 并不是每一个查询条件都会启用的。 ……
"假如,客户订单那个条件为空时。。就表示查询所有的客户订单" 那你应该这么写: and (B.CustomerNo =@CustomerNo or @CustomerNo is null) 然后对B.CustomerNo 建INDEX,这样才能利用到INDEX。
aroc_lo 2013-04-01
  • 打赏
  • 举报
回复
引用 8 楼 SQL_Beginner 的回复:
另外,我发生你的很多条件 都用LIKE, 比如 B.CustomerNo LIKE '%'+@CustomerNo+'%' ,必须要用LIKE吗? 可以用=吗,比如, B.CustomerNo =@CustomerNo
其它象 LIKE 我也想不用。 可是,当一个查询,是有很多条件的,, 并不是每一个查询条件都会启用的。 假如,客户订单那个条件为空时。。就表示查询所有的客户订单。 在这里。只能用 客户订单 LIKE % 了。。如果是 客户订单 = % 就应该没有数据出来了。


@CustomerOrdersNo VARCHAR(30)='%',
  @CustomerNo VARCHAR(15)='%',
  @ProductNo VARCHAR(30)='%',
  @ProductClass VARCHAR(5)='%',
  @OrdersClass VARCHAR(5)='%',
  @DeliveryClass VARCHAR(1)='0',
  @ClosedClass VARCHAR(1)='0',
  @OrdresStartDate varchar(10)='2013-03-01',
  @OrdresEndDate varchar(10)='2013-03-31',
  @ProjectNo VARCHAR(30)='%',
  @BusinessWwithASingle VARCHAR(12)='%',
  @Clerk VARCHAR(30)='%',
  @Region VARCHAR(30)='%',
  @DeliveryStartDate varchar(10)='2003-01-01',
  @DeliveryEndDate varchar(10)='2013-01-01',
  @ReceiptClass VARCHAR(2)='0'

这一堆的参数就表示,有这么一堆和查询条件,并不是每一个都会启用的。这个得让前台应用程序去进行选择项的查询。 存储过程这里,不能去逐个判断哪个查询条件是否启用而单独写 WHERE 吧。
---涛声依旧--- 2013-04-01
  • 打赏
  • 举报
回复
建议楼主做如下优化: 1、将临时表#TEMP1、#TEMP2、#TEMP3等全部改为固定的实际表,临时表和游标等数据库的珍贵资源尽量少用; 2、建议这几个字段建立索引:CustomerNo、CustomerOrdersNo、ProductNo、ProductClass、OrdersClass
  • 打赏
  • 举报
回复
另外,我发生你的很多条件 都用LIKE, 比如 B.CustomerNo LIKE '%'+@CustomerNo+'%' ,必须要用LIKE吗? 可以用=吗,比如, B.CustomerNo =@CustomerNo
  • 打赏
  • 举报
回复
能否把执行计划帖出来啊,可以按下面的方式来,然后把列名为Rows Executes StmtText StmtId NodeId Parent PhysicalOp LogicalOp Argument DefinedValues EstimateRows EstimateIO EstimateCPU AvgRowSize TotalSubtreeCost OutputList Warnings Type Parallel EstimateExecutions的文本计划给出来,可能会很多内容。 set statistics profile on Go exec [dbo].[SP_QryOrderDeliverySchedule] ......
aroc_lo 2013-04-01
  • 打赏
  • 举报
回复
以是就是那个存储过程的代码了。 一贴贴不完,,要开两贴才行。
aroc_lo 2013-04-01
  • 打赏
  • 举报
回复

             DECLARE  @I INT,@J INT,@GDBH VARCHAR(100),@CP VARCHAR(30),@DH VARCHAR(30),@ProductID VARCHAR(10),@ProductionQty INT,@StorageQty INT

              SET  @I=0

              SET @J=1

              UPDATE #TEMP2 SET Fnum=@I,@I=@I+1

              WHILE @J<=@I
               BEGIN
                   SELECT  @CP=ProductNo,@DH=CustomerOrdersNo,@ProductID=ProductID FROM #TEMP2 WHERE Fnum=@J

                   SET @GDBH=''

                   SELECT  @GDBH=@GDBH+';' +TableNumber
                          FROM    Produce_ProductionEngineeringSingle_master A INNER JOIN  
	                           Produce_ProductionEngineeringSingle_D B ON A.XH=B.MasterTableNo
	            WHERE  ProductID=@ProductID AND ProductNo=@CP AND CustomerOrdersNo=@DH   

                   IF  Isnull(@GDBH,'')<>'' 
                   BEGIN
                         SET @GDBH=Substring(@GDBH,2,Len(@GDBH)-1)  


                   SELECT  @ProductionQty=SUM(Isnull(B.ProductionQty,0))
                          FROM    Produce_ProductionEngineeringSingle_master A INNER JOIN  
	                           Produce_ProductionEngineeringSingle_D B ON A.XH=B.MasterTableNo
	            WHERE  ProductID=@ProductID AND ProductNo=@CP AND CustomerOrdersNo=@DH   

                   SELECT  @StorageQty=SUM(Isnull(C.StorageQty,0))
                          FROM    Produce_ProductionEngineeringSingle_master A INNER JOIN  
	                           Produce_ProductionEngineeringSingle_D B ON A.XH=B.MasterTableNo INNER  JOIN
                                        KC_CPRKD_D        C ON A.TableNumber=C.ProjectNo AND B.ProductNo=C.ProductNo  AND C.CustomerOrdersNo=B.CustomerOrdersNo
	            WHERE  B.ProductID=@ProductID AND B.ProductNo=@CP AND B.CustomerOrdersNo=@DH   

                       UPDATE #TEMP2 SET ProjectNo=@GDBH,ProductionQty=@ProductionQty,StorageQty=@StorageQty
                            WHERE Fnum=@J  

                  END

                   SET  @J=@J+1
                
              END
 
     END
     BEGIN  
         DECLARE @SCS INT

        SELECT  DDCP=B.CustomerOrdersNo+B.ProductNo+B.ProductID,ProductionQty
            INTO #TEMP_CustomerOrdersNo
            FROM Produce_ProductionEngineeringSingle_master A INNER JOIN 
                       Produce_ProductionEngineeringSingle_D B ON A.XH=B.MasterTableNo
           WHERE A.TableNumber=@ProjectNo
      

            IF @DeliveryClass='0' OR @DeliveryClass='%' 
	BEGIN
	
	 SELECT A.CustomerOrdersNo,/*A.CustomerOrdersNo2,*/A.ProductID,A.ProductNo,YSSL=SUM(Isnull(A.SHSL,0)),FSSL=SUM(isnull(A.FSSL,0)),
	       SHuoRQ=(SELECT MAX(SHuoRQ) FROM Orders_SHDan_master C 
	               INNER JOIN Orders_SHDan_D D ON C.XH=D.MasterTableNo 
	               WHERE D.CustomerOrdersNo=A.CustomerOrdersNo AND D.ProductNo=A.ProductNo AND D.ProductID=A.ProductID
	            )
	  INTO #TEMP10
	  FROM Orders_SHDan_D A INNER JOIN 
    	             Orders_SHDan_master  B ON A.MasterTableNo=B.XH
	  WHERE  B.SHF=1
                              AND   (A.CustomerOrdersNo+A.ProductNo+A.ProductID)  IN (SELECT DDCP FROM #TEMP_CustomerOrdersNo)
	                AND A.DeliveryClass=0 
	  GROUP BY A.CustomerOrdersNo,A.ProductID,A.ProductNo--,A.CustomerOrdersNo2
	 
	  INSERT INTO #TEMP2 
	   SELECT Fnum=0,ReturnNo='%',A.CustomerOrdersNo,A.CustomerOrdersNo2,A.CustomerNo,CustomerName=E.ZWMC,B.ProductID,B.ProductNo,D.ProductName,D.ProductSize,D.CustomerLH,A.Clerk,D.ProductHH,B.OrderAccount,B.FSSL,YSSL=isnull(C.YSSL,0),
	       WSSL=ROUND(B.OrderAccount-ISNULL(C.YSSL,0),0),YSBP=C.FSSL,CKSL=H.CPSL,B.ProductPrice,A.DDRQ,JHRQ=Isnull(BGRQ,B.JHRQ),C.SHuoRQ,F.ClassName,G.TypeName,
	       DeliveryClass='订单送货',B.ClosedYN,B.MasterTableNo,ProjectNo=@ProjectNo,A.CurrenyUnit,B.ZYSM,E.GDGDY,
                    ProductionQty=(SELECT SUM(ProductionQty) FROM #TEMP_CustomerOrdersNo ),
                    StorageQty=(SELECT SUM(StorageQty) FROM KC_CPRKD_D WHERE ProjectNo=@ProjectNo AND ProductNo=B.ProductNo AND CustomerOrdersNo=A.CustomerOrdersNo),A.HL
	    FROM Orders_KHOrders_master A INNER JOIN 
	               Orders_KHOrders_D B ON A.XH=B.MasterTableNo  LEFT JOIN 
	              #TEMP10 C ON A.CustomerOrdersNo=C.CustomerOrdersNo AND B.ProductNo=C.ProductNo AND B.ProductID=C.ProductID  LEFT JOIN
	             BasicData_ProductDataTable_master D ON B.ProductNo=D.ProductNo LEFT JOIN 
	             BasicData_KHZLB_master E ON A.CustomerNo=E.CustomerNo LEFT JOIN
	             BasicData_ProductClassBH  F ON D.ProductClass=F.LBBH LEFT JOIN
	             BasicData_OrdersClassBH  G ON G.LXBH=A.OrdersClass LEFT JOIN
	             V_KC_GetCPDQKCB  H ON H.ProductNo=B.ProductNo
	     WHERE A.SHF=1 
	                   AND Isnull(A.ReceiptClass,0)  LIKE '%'+@ReceiptClass+'%'
	                  AND A.CustomerOrdersNo+B.ProductNo+B.ProductID  IN (SELECT DDCP  FROM #TEMP_CustomerOrdersNo)
	           --       AND B.ProductNo  =@CP

           END

             IF @DeliveryClass='1' OR @DeliveryClass='%' 
	BEGIN
	
	 SELECT A.ReturnNo,A.CustomerOrdersNo,/*A.CustomerOrdersNo2,*/A.ProductID,A.ProductNo,YSSL=SUM(isnull(A.SHSL,0)),FSSL=SUM(isnull(A.FSSL,0)),
	        SHuoRQ=(SELECT MAX(SHuoRQ) FROM Orders_SHDan_master C 
	               INNER JOIN Orders_SHDan_D D ON C.XH=D.MasterTableNo 
	               WHERE D.CustomerOrdersNo=A.CustomerOrdersNo AND D.ProductNo=A.ProductNo AND D.ProductID=A.ProductID AND D.ReturnNo=A.ReturnNo
	            )
	  INTO #TEMP30
	  FROM Orders_SHDan_D A INNER JOIN 
                          Orders_SHDan_master  B ON A.MasterTableNo=B.XH
	  WHERE B.SHF=1 AND  A.CustomerOrdersNo+A.ProductNo+A.ProductID  IN (SELECT DDCP FROM #TEMP_CustomerOrdersNo)
	     --   AND A.ProductNo=@CP
	        AND A.DeliveryClass=1
	  GROUP BY A.ReturnNo,A.CustomerOrdersNo,A.ProductID,A.ProductNo--,A.CustomerOrdersNo2
	
	  INSERT INTO #TEMP2 
	   SELECT  Fnum=0,ReturnNo=A.TableNumber,A.CustomerOrdersNo,A.CustomerOrdersNo2,A.CustomerNo,CustomerName=E.ZWMC,B.ProductID,B.ProductNo,D.ProductName,D.ProductSize,D.CustomerLH,Clerk='',D.ProductHH,B.THSL AS OrderAccount,FSSL=0,YSSL=isnull(C.YSSL,0),
	          WSSL=ROUND(B.THSL-ISNULL(C.YSSL,0),0),YSBP=C.FSSL,CKSL=H.CPSL,B.ProductPrice,A.THRQ AS DDRQ,B.BJRQ AS JHRQ,C.SHuoRQ,F.ClassName,G.TypeName,
	          DeliveryClass='退货送货',B.ClosedYN,B.MasterTableNo,ProjectNo=@ProjectNo,A.CurrenyUnit,ZYSM=B.Remark,E.GDGDY,
                        ProductionQty=(SELECT SUM(ProductionQty) FROM #TEMP_CustomerOrdersNo ),
                        StorageQty=(SELECT SUM(StorageQty) FROM KC_CPRKD_D WHERE ProjectNo=@ProjectNo AND ProductNo=B.ProductNo ),A.HL
	    FROM Orders_THDan_master A INNER JOIN 
	               Orders_THDan_D B ON A.XH=B.MasterTableNo  LEFT JOIN 
	         #TEMP30 C ON A.TableNumber=C.ReturnNo AND A.CustomerOrdersNo=C.CustomerOrdersNo AND B.ProductNo=C.ProductNo AND B.ProductID=C.ProductID  LEFT JOIN
	         BasicData_ProductDataTable_master D ON B.ProductNo=D.ProductNo LEFT JOIN 
	         BasicData_KHZLB_master E ON A.CustomerNo=E.CustomerNo LEFT JOIN
	         BasicData_ProductClassBH  F ON D.ProductClass=F.LBBH LEFT JOIN
	         BasicData_OrdersClassBH  G ON G.LXBH=A.OrdersClass LEFT JOIN
	          V_KC_GetCPDQKCB  H ON H.ProductNo=B.ProductNo  
	    WHERE A.SHF=1
                        AND A.BDF=1 
	          AND Isnull(A.ReceiptClass,0)  LIKE '%'+@ReceiptClass+'%'
	          AND A.TableNumber+B.ProductNo+B.ProductID  IN (SELECT DDCP  FROM #TEMP_CustomerOrdersNo)
	END


   END

    SELECT A.*,B.CurrencyName  
       FROM #TEMP2  A  LEFT JOIN
                  BasicData_HBBH  B ON A.CurrenyUnit=B.HBBH
        ORDER BY JHRQ,CustomerNo


  
RETURN






GO
aroc_lo 2013-04-01
  • 打赏
  • 举报
回复



CREATE   PROCEDURE [dbo].[SP_QryOrderDeliverySchedule]
  @CustomerOrdersNo VARCHAR(30)='%',
  @CustomerNo VARCHAR(15)='%',
  @ProductNo VARCHAR(30)='%',
  @ProductClass VARCHAR(5)='%',
  @OrdersClass VARCHAR(5)='%',
  @DeliveryClass VARCHAR(1)='0',
  @ClosedClass VARCHAR(1)='0',
  @OrdresStartDate varchar(10)='2013-03-01',
  @OrdresEndDate varchar(10)='2013-03-31',
  @ProjectNo VARCHAR(30)='%',
  @BusinessWwithASingle VARCHAR(12)='%',
  @Clerk VARCHAR(30)='%',
  @Region VARCHAR(30)='%',
  @DeliveryStartDate varchar(10)='2003-01-01',
  @DeliveryEndDate varchar(10)='2013-01-01',
  @ReceiptClass VARCHAR(2)='0'
AS
--取到订单送货进度查询表
	
	CREATE TABLE #TEMP2
	 (Fnum INT ,
      ReturnNo VARCHAR(30),
      CustomerOrdersNo VARCHAR(30),
      CustomerOrdersNo2 VARCHAR(50),
	  CustomerNo VARCHAR(15),
	  CustomerName VARCHAR(50),
	  ProductID VARCHAR(50),
	  ProductNo VARCHAR(30),
	  ProductName VARCHAR(200),
	  ProductSize VARCHAR(100),
	  CustomerLH  VARCHAR(30),
	  Clerk  VARCHAR(30),
	  ProductHH  VARCHAR(30),
	  OrderAccount FLOAT,
                FSSL FLOAT,
	  YSSL FLOAT,
	  WSSL FLOAT,
	  YSBP  FLOAT,
	  KCSL FLOAT,
	  ProductPrice FLOAT,
	  DDRQ SMALLDATETIME,
	  JHRQ SMALLDATETIME,
	  SHuoRQ SMALLDATETIME,
	  ClassName VARCHAR(50),
	  TypeName VARCHAR(50),
	  DeliveryClass VARCHAR(50),
	  ClosedYN  INT,
	  MasterTableNo INT,
	  ProjectNo VARCHAR(100),
          CurrenyUnit VARCHAR(10),
          ZYSM  VARCHAR(200),
          GDGDY VARCHAR(12),
          ProductionQty INT,
          StorageQty INT,
          HL float
	 )

	
        IF @ProjectNo='%'
        BEGIN  

	IF @DeliveryClass='0' OR @DeliveryClass='%' 
	BEGIN
	
	 SELECT  A.CustomerOrdersNo,/*A.CustomerOrdersNo2,*/A.ProductID,A.ProductNo,YSSL=SUM(Isnull(A.SHSL,0)),FSSL=SUM(isnull(A.FSSL,0)),SHuoRQ=MAX(B.SHuoRQ)
	     --  SHuoRQ=(SELECT MAX(SHuoRQ) FROM Orders_SHDan_master C 
	     --          INNER JOIN Orders_SHDan_D D ON C.XH=D.MasterTableNo 
	       --        WHERE D.CustomerOrdersNo=A.CustomerOrdersNo AND D.ProductNo=A.ProductNo AND D.ProductID=A.ProductID
	       --     )
	  INTO #TEMP1
	  FROM Orders_SHDan_D A INNER JOIN 
	             Orders_SHDan_master  B ON A.MasterTableNo=B.XH INNER JOIN
                          Orders_KHOrders_master   C ON B.CustomerNo=C.CustomerNo  AND A.CustomerOrdersNo=C.CustomerOrdersNo
	  WHERE B.SHF=1 AND   B.CustomerNo LIKE '%'+@CustomerNo+'%' 
	        AND A.CustomerOrdersNo LIKE '%'+@CustomerOrdersNo+'%'
	        AND A.ProductNo LIKE '%'+@ProductNo+'%'
	        AND A.DeliveryClass=0 
	        AND Isnull(C.ReceiptClass,0)  LIKE '%'+@ReceiptClass+'%'
	       AND CONVERT(CHAR(10),C.DDRQ,121) BETWEEN @OrdresStartDate AND @OrdresEndDate
	  GROUP BY A.CustomerOrdersNo,A.ProductID,A.ProductNo--,A.CustomerOrdersNo2
	  
	
	  INSERT INTO #TEMP2 
	   SELECT Fnum=0,ReturnNo='%',A.CustomerOrdersNo,A.CustomerOrdersNo2,A.CustomerNo,CustomerName=E.ZWMC,B.ProductID,B.ProductNo,D.ProductName,D.ProductSize,D.CustomerLH,A.Clerk,D.ProductHH,B.OrderAccount,B.FSSL,YSSL=isnull(C.YSSL,0),
	       WSSL=ROUND(B.OrderAccount-ISNULL(C.YSSL,0),0),YSBP=C.FSSL,CKSL=H.CPSL,B.ProductPrice,A.DDRQ,JHRQ=Isnull(BGRQ,B.JHRQ),C.SHuoRQ,F.ClassName,G.TypeName,
	       DeliveryClass='订单送货',B.ClosedYN,B.MasterTableNo,ProjectNo='',A.CurrenyUnit,B.ZYSM,A.BusinessWwithASingle,ProductionQty=0,StorageQty=0,A.HL
	    FROM Orders_KHOrders_master A INNER JOIN 
	               Orders_KHOrders_D B ON A.XH=B.MasterTableNo  LEFT JOIN 
	              #TEMP1 C ON A.CustomerOrdersNo=C.CustomerOrdersNo AND B.ProductNo=C.ProductNo AND B.ProductID=C.ProductID  LEFT JOIN
	             BasicData_ProductDataTable_master D ON B.ProductNo=D.ProductNo LEFT JOIN 
	             BasicData_KHZLB_master E ON A.CustomerNo=E.CustomerNo LEFT JOIN
	             BasicData_ProductClassBH  F ON D.ProductClass=F.LBBH LEFT JOIN
	             BasicData_OrdersClassBH  G ON G.LXBH=A.OrdersClass LEFT JOIN
	             V_KC_GetCPDQKCB  H ON H.ProductNo=B.ProductNo
	     WHERE A.SHF=1 AND A.CustomerNo LIKE @CustomerNo 
	         AND A.CustomerOrdersNo LIKE '%'+@CustomerOrdersNo+'%'
	         AND B.ProductNo LIKE '%'+@ProductNo+'%'
	         AND D.ProductClass LIKE '%'+@ProductClass+'%'
	         AND A.OrdersClass LIKE '%'+@OrdersClass+'%'
	         AND Isnull(A.BusinessWwithASingle,'%')  LIKE '%'+@BusinessWwithASingle+'%'
	         AND (Isnull(A.Clerk,'%')  LIKE '%'+@Clerk+'%' OR ISNULL(A.KDR,'%') LIKE '%'+@Clerk+'%' OR Isnull(A.BusinessWwithASingle,'%')  LIKE '%'+@Clerk+'%')
	         AND Isnull(E.Region,'%')  LIKE '%'+@Region+'%'
	         AND Isnull(A.ReceiptClass,0)  LIKE '%'+@ReceiptClass+'%'
	         AND CAST(Isnull(B.ClosedYN,0) AS VARCHAR) LIKE '%'+@ClosedClass+'%'
	         AND CONVERT(CHAR(10),A.DDRQ,121) BETWEEN @OrdresStartDate AND @OrdresEndDate 
	         AND CONVERT(CHAR(10),B.JHRQ,121)  BETWEEN @DeliveryStartDate AND @DeliveryEndDate 
	
	END
	
	IF @DeliveryClass='1' OR @DeliveryClass='%' 
	BEGIN
	
	 SELECT A.ReturnNo,A.CustomerOrdersNo,/*A.CustomerOrdersNo2,*/A.ProductID,A.ProductNo,YSSL=SUM(isnull(A.SHSL,0)),FSSL=SUM(isnull(A.FSSL,0)),SHuoRQ=MAX(B.SHuoRQ)
	      --  SHuoRQ=(SELECT MAX(SHuoRQ) FROM Orders_SHDan_master C 
	     --          INNER JOIN Orders_SHDan_D D ON C.XH=D.MasterTableNo 
	      --         WHERE D.ProductNo=A.ProductNo AND D.ProductID=A.ProductID AND D.ReturnNo=A.ReturnNo
	     --       )

	  INTO #TEMP3
	  FROM Orders_SHDan_D A INNER JOIN 
                          Orders_SHDan_master  B ON A.MasterTableNo=B.XH INNER JOIN
                          Orders_THDan_master  C ON B.CustomerNo=C.CustomerNo AND A.ReturnNo=C.TableNumber
	  WHERE  B.SHF=1 AND B.CustomerNo LIKE '%'+@CustomerNo+'%' 
	        AND Isnull(A.CustomerOrdersNo,'') LIKE '%'+@CustomerOrdersNo+'%'
	        AND A.ProductNo LIKE '%'+@ProductNo+'%'
	        AND A.DeliveryClass=1
	        AND Isnull(C.ReceiptClass,0)  LIKE '%'+@ReceiptClass+'%'
	        AND CONVERT(CHAR(10),C.THRQ,121) BETWEEN @OrdresStartDate AND @OrdresEndDate 
	  GROUP BY A.ReturnNo,A.CustomerOrdersNo,A.ProductID,A.ProductNo--,A.CustomerOrdersNo2
	
	  INSERT INTO #TEMP2 
	   SELECT  Fnum=0,ReturnNo=A.TableNumber,A.CustomerOrdersNo,A.CustomerOrdersNo2,A.CustomerNo,CustomerName=E.ZWMC,B.ProductID,B.ProductNo,D.ProductName,D.ProductSize,D.CustomerLH,Clerk='',D.ProductHH,B.THSL AS OrderAccount,FSSL=0,YSSL=isnull(C.YSSL,0),
	          WSSL=ROUND(B.THSL-ISNULL(C.YSSL,0),0),YSBP=C.FSSL,CKSL=H.CPSL,B.ProductPrice,A.THRQ AS DDRQ,B.BJRQ AS JHRQ,C.SHuoRQ,F.ClassName,G.TypeName,
	          DeliveryClass='退货送货',B.ClosedYN,B.MasterTableNo,ProjectNo='',A.CurrenyUnit,ZYSM=B.Remark,E.BusinessWwithASingle,ProductionQty=0,StorageQty=0,A.HL
	    FROM Orders_THDan_master A INNER JOIN 
	               Orders_THDan_D B ON A.XH=B.MasterTableNo  LEFT JOIN 
	         #TEMP3 C ON A.TableNumber=C.ReturnNo  AND B.ProductNo=C.ProductNo AND B.ProductID=C.ProductID  LEFT JOIN
	         BasicData_ProductDataTable_master D ON B.ProductNo=D.ProductNo LEFT JOIN 
	         BasicData_KHZLB_master E ON A.CustomerNo=E.CustomerNo LEFT JOIN
	         BasicData_ProductClassBH  F ON D.ProductClass=F.LBBH LEFT JOIN
	         BasicData_OrdersClassBH  G ON G.LXBH=A.OrdersClass LEFT JOIN
	          V_KC_GetCPDQKCB  H ON H.ProductNo=B.ProductNo  
	    WHERE A.SHF=1 AND A.BDF=1 AND A.CustomerNo LIKE @CustomerNo 
	          AND Isnull(A.CustomerOrdersNo,'') LIKE '%'+@CustomerOrdersNo+'%'
	          AND B.ProductNo LIKE '%'+@ProductNo+'%'
	          AND D.ProductClass LIKE '%'+@ProductClass+'%'
	          AND A.OrdersClass LIKE '%'+@OrdersClass+'%'
	         AND Isnull(E.BusinessWwithASingle,'%')  LIKE '%'+@BusinessWwithASingle+'%'
	         AND Isnull(E.Region,'%')  LIKE '%'+@Region+'%'
	         AND Isnull(Clerk,'%')  LIKE '%'+@Clerk+'%'
	        AND Isnull(A.ReceiptClass,0)  LIKE '%'+@ReceiptClass+'%'
	         AND CAST(Isnull(B.ClosedYN,0) AS VARCHAR) LIKE '%'+@ClosedClass+'%'
	         AND CONVERT(CHAR(10),A.THRQ,121) BETWEEN @OrdresStartDate AND @OrdresEndDate 
	         AND CONVERT(CHAR(10),Isnull(B.BJRQ,getdate()),121)  BETWEEN @DeliveryStartDate AND @DeliveryEndDate 
	
	END
	
	         
 


22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧