yuejie.sql

博客展示了多个SQL存储过程,包括sp_testyuejie、sp_stockSFC等,通过对不同表进行连接(JOIN)操作,依据日期条件筛选数据,计算各部分数量的总和,并进行加减运算得出最终结果,还涉及临时表的创建与使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CREATE PROCEDURE sp_testyuejie
@date1 datetime,
@date2 datetime
 AS
SELECT isnull(tmp1.sumquantity,0) - isnull(tmp2.sumquantity,0) - isnull(tmp3.sumquantity,0) + isnull(tmp4.sumquantity,0) AS Expr1,TMP1.PARTNAME
FROM (SELECT a.PARTID, a.PARTNAME, SUM(a.QUANTITY) AS sumquantity
        FROM dbo.PARTSINPUTBODY a LEFT OUTER JOIN
              dbo.PARTSINPUTHAND b ON a.BILLCODE = b.BILLCODE
        WHERE (b.BILLDATE BETWEEN @date1 and @date2)
        GROUP BY a.PARTID, a.PARTNAME) tmp1 left outer JOIN
          (SELECT a.PARTID, a.PARTNAME, SUM(a.QUANTITY) AS sumquantity
         FROM dbo.PARTSOUTPUTBODY a LEFT OUTER JOIN
               dbo.PARTSOUTPUTHAND b ON a.BILLCODE = b.BILLCODE
         WHERE  (b.BILLDATE BETWEEN @date1 and @date2)
         GROUP BY a.PARTID, a.PARTNAME) tmp2 ON tmp1.PARTID = tmp2.PARTID LEFT OUTER JOIN
          (SELECT isnull(SUM(a.quantity), 0) AS sumquantity,
               a.partid
         FROM reimbursebillbody a , reimbursebillhand b
         WHERE a.billcode = b.billcode AND
               b.reimbursetype='1'AND
               b.isexecute = 1 AND
               b.billdate BETWEEN @date1 and @date2
         GROUP BY a.partid
) tmp3 ON tmp1.PARTID = tmp3.PARTID LEFT OUTER JOIN
          (SELECT isnull(SUM(a.quantity), 0) AS sumquantity,
               a.partid
         FROM reimbursebillbody a , reimbursebillhand b
         WHERE a.billcode = b.billcode AND
               b.reimbursetype='2'AND
               b.isexecute = 1 AND
               b.billdate BETWEEN @date1 and @date2
         GROUP BY a.partid
) tmp4 ON tmp1.PARTID = tmp4.PARTID

GO

SELECT isnull(tmp1.sumquantity,0) - isnull(tmp2.sumquantity,0) - isnull(tmp3.sumquantity,0) + isnull(tmp4.sumquantity,0) AS Expr1,TMP1.PARTNAME
FROM (SELECT a.PARTID, a.PARTNAME, SUM(a.QUANTITY) AS sumquantity
        FROM dbo.PARTSINPUTBODY a LEFT OUTER JOIN
              dbo.PARTSINPUTHAND b ON a.BILLCODE = b.BILLCODE
        WHERE (b.BILLDATE BETWEEN '2005-02-01' AND '2005-02-26')
        GROUP BY a.PARTID, a.PARTNAME) tmp1 left outer JOIN
          (SELECT a.PARTID, a.PARTNAME, SUM(a.QUANTITY) AS sumquantity
         FROM dbo.PARTSOUTPUTBODY a LEFT OUTER JOIN
               dbo.PARTSOUTPUTHAND b ON a.BILLCODE = b.BILLCODE
         WHERE  (b.BILLDATE BETWEEN '2005-02-01' AND '2005-02-26')
         GROUP BY a.PARTID, a.PARTNAME) tmp2 ON tmp1.PARTID = tmp2.PARTID LEFT OUTER JOIN
          (SELECT isnull(SUM(a.quantity), 0) AS sumquantity,
               a.partid
         FROM reimbursebillbody a , reimbursebillhand b
         WHERE a.billcode = b.billcode AND
               b.reimbursetype='1'AND
               b.isexecute = 1 AND
               b.billdate BETWEEN '2005-02-01' AND '2005-02-26'
         GROUP BY a.partid
) tmp3 ON tmp1.PARTID = tmp3.PARTID LEFT OUTER JOIN
          (SELECT isnull(SUM(a.quantity), 0) AS sumquantity,
               a.partid
         FROM reimbursebillbody a , reimbursebillhand b
         WHERE a.billcode = b.billcode AND
               b.reimbursetype='2'AND
               b.isexecute = 1 AND
               b.billdate BETWEEN '2005-02-01' AND '2005-02-26'
         GROUP BY a.partid
) tmp4 ON tmp1.PARTID = tmp4.PARTID


GO

CREATE PROCEDURE sp_stockSFC
 @Bgntime datetime,
 @Endtime datetime

AS
SELECT TOP 100 PERCENT texjc.id, texin.price, texjc.SORTTYPE, texjc.ownerid,
      texin.depotcode, ISNULL(texout.领用实际, 0) AS 领用实际, ISNULL(texout.领用票据, 0)
      AS 领用票据, ISNULL(texin.入库实际, 0) AS 入库实际, ISNULL(texin2.入库票据, 0)
      AS 入库票据, texjc.结存数量, ISNULL(texrt.入库退货票据, 0) AS 入库退货票据,
      ISNULL(texrt.入库退货实际, 0) AS 入库退货实际, ISNULL(texlt.领用退货实际, 0)
      AS 领用退货实际, ISNULL(texlt2.领用退货票据, 0) AS 领用退货票据,
      ISNULL(texin2.入库票据, 0) - ISNULL(texout.领用票据, 0) - ISNULL(texrt.入库退货票据,
      0) + ISNULL(texlt2.领用退货票据, 0) AS 当前结存票据, ISNULL(texin.入库实际, 0)
      - ISNULL(texout.领用实际, 0) - ISNULL(texrt.入库退货实际, 0)
      + ISNULL(texlt.领用退货实际, 0) AS 当前结存实际, 0 AS 期初票据, 0 AS 期初实际
FROM (


SELECT SUM(BILLQUANTITY) AS 结存票据, SUM(STOCKSUM) AS 结存金额,
              SUM(STOCKQUANTITY) AS 结存数量, SORTTYPE, ownerid, code, name, id,
              stockprice
        FROM PARTINFO
        GROUP BY SORTTYPE, ownerid, code, name, id, stockprice


)
      texjc LEFT OUTER JOIN
          (


SELECT isnull(SUM(a.quantity), 0) AS 领用退货实际,
               isnull(SUM(a.totalsum), 0) AS 领用退货金额,
               a.partid
         FROM reimbursebillbody a , reimbursebillhand b
         WHERE a.billcode = b.billcode AND
               b.reimbursetype='2'AND
               b.isexecute = 1 AND
               b.billdate BETWEEN '2005-02-01' AND '2005-02-28'
         GROUP BY a.partid


) texlt ON
      texjc.id = texlt.partid LEFT OUTER JOIN
          (


SELECT isnull(SUM(a.quantity), 0) AS 领用退货票据,
               isnull(SUM(a.totalsum), 0) AS 领用退货金额,
               a.partid
         FROM reimbursebillbody a , reimbursebillhand b
         WHERE a.billcode = b.billcode AND
               b.reimbursetype='2'AND
               b.isexecute = 1 AND
               b.billdate BETWEEN '2005-02-01' AND '2005-02-28'
         GROUP BY a.partid

) texlt2 ON
      texjc.id = texlt2.partid LEFT OUTER JOIN
          (

 

SELECT isnull(SUM(a.quantity), 0) AS 入库退货票据,
               isnull(SUM(a.outputqry), 0) AS 入库退货实际,
               isnull(SUM(a.totalsum), 0) AS 入库退货金额,
               a.partid
         FROM reimbursebillbody a , reimbursebillhand b
         WHERE a.billcode = b.billcode AND
        b.reimbursetype='1'AND
               b.billdate BETWEEN '2005-02-01' AND '2005-02-28'
         GROUP BY a.partid

 

) texrt ON
      texjc.id = texrt.partid LEFT OUTER JOIN
          (
SELECT isnull(SUM(a.outputqry), 0) AS 领用实际,
               isnull(SUM(a.quantity), 0) AS 领用票据,
               isnull(SUM(a.totalsum), 0) AS 领用金额,
               b.depotcode, a.partid
         FROM partsoutputbody a, partsoutputhand b
         WHERE b.billcode = b.billcode AND b.billdate BETWEEN'2005-02-01' AND '2005-02-28'
         GROUP BY b.depotcode, a.partid

 

) texout ON texjc.id = texout.partid LEFT OUTER JOIN
          (


SELECT isnull(SUM(a.quantity), 0) AS 入库实际,
               isnull(SUM(a.totalsum), 0) AS 入库金额,
               b.depotcode, a.partid,a.price
         FROM partsinputbody a, partsinputhand b
         WHERE a.billcode = b.billcode AND
               b.isexecute = 1 AND
               b.billdate BETWEEN '2005-02-01' AND '2005-02-28'
         GROUP BY b.depotcode,a.partid, a.price

 

) texin ON
      texjc.id = texin.partid LEFT OUTER JOIN
          (

 

SELECT isnull(SUM(a.quantity), 0) AS 入库票据,
               isnull(SUM(a.totalsum), 0) AS 入库金额,
               b.depotcode, a.partid
         FROM partsinputbody a, partsinputhand b
         WHERE a.billcode = b.billcode AND
               b.billdate BETWEEN '2005-02-01' AND '2005-02-28'
         GROUP BY b.depotcode, a.partid

 

) texin2 ON texjc.id = texin2.partid


GO

 

 

 

实际,消耗,期初 ,name

select a.expr1,b.expr1,b.expr1+a.expr1,b.partname
from
(SELECT isnull(tmp1.sumquantity,0) - isnull(tmp2.sumquantity,0) - isnull(tmp3.sumquantity,0) + isnull(tmp4.sumquantity,0) AS Expr1,TMP1.PARTNAME,tmp1.partid
FROM (SELECT a.PARTID, a.PARTNAME, SUM(a.QUANTITY) AS sumquantity
        FROM dbo.PARTSINPUTBODY a LEFT OUTER JOIN
              dbo.PARTSINPUTHAND b ON a.BILLCODE = b.BILLCODE
        WHERE (b.BILLDATE BETWEEN '2005-02-25' AND '2005-02-26')
        GROUP BY a.PARTID, a.PARTNAME) tmp1 left outer JOIN
          (SELECT a.PARTID, a.PARTNAME, SUM(a.QUANTITY) AS sumquantity
         FROM dbo.PARTSOUTPUTBODY a LEFT OUTER JOIN
               dbo.PARTSOUTPUTHAND b ON a.BILLCODE = b.BILLCODE
         WHERE  (b.BILLDATE BETWEEN '2005-02-25' AND '2005-02-26')
         GROUP BY a.PARTID, a.PARTNAME) tmp2 ON tmp1.PARTID = tmp2.PARTID LEFT OUTER JOIN
          (SELECT isnull(SUM(a.quantity), 0) AS sumquantity,
               a.partid
         FROM reimbursebillbody a , reimbursebillhand b
         WHERE a.billcode = b.billcode AND
               b.reimbursetype='1'AND
               b.isexecute = 1 AND
               b.billdate BETWEEN '2005-02-25' AND '2005-02-26'
         GROUP BY a.partid
) tmp3 ON tmp1.PARTID = tmp3.PARTID LEFT OUTER JOIN
          (SELECT isnull(SUM(a.quantity), 0) AS sumquantity,
               a.partid
         FROM reimbursebillbody a , reimbursebillhand b
         WHERE a.billcode = b.billcode AND
               b.reimbursetype='2'AND
               b.isexecute = 1 AND
               b.billdate BETWEEN '2005-02-25' AND '2005-02-26'
         GROUP BY a.partid
) tmp4 ON tmp1.PARTID = tmp4.PARTID) a

right outer join
(
SELECT isnull(tmp1.sumquantity,0) - isnull(tmp2.sumquantity,0) - isnull(tmp3.sumquantity,0) + isnull(tmp4.sumquantity,0) AS Expr1,TMP1.PARTNAME,tmp1.partid
FROM (SELECT a.PARTID, a.PARTNAME, SUM(a.QUANTITY) AS sumquantity
        FROM dbo.PARTSINPUTBODY a LEFT OUTER JOIN
              dbo.PARTSINPUTHAND b ON a.BILLCODE = b.BILLCODE
        WHERE (b.BILLDATE <= '2005-02-28')
        GROUP BY a.PARTID, a.PARTNAME) tmp1 left outer JOIN
          (SELECT a.PARTID, a.PARTNAME, SUM(a.QUANTITY) AS sumquantity
         FROM dbo.PARTSOUTPUTBODY a LEFT OUTER JOIN
               dbo.PARTSOUTPUTHAND b ON a.BILLCODE = b.BILLCODE
         WHERE  (b.BILLDATE <= '2005-02-28')
         GROUP BY a.PARTID, a.PARTNAME) tmp2 ON tmp1.PARTID = tmp2.PARTID LEFT OUTER JOIN
          (SELECT isnull(SUM(a.quantity), 0) AS sumquantity,
               a.partid
         FROM reimbursebillbody a , reimbursebillhand b
         WHERE a.billcode = b.billcode AND
               b.reimbursetype='1'AND
               b.isexecute = 1 AND
               b.billdate <= '2005-02-28'
         GROUP BY a.partid
) tmp3 ON tmp1.PARTID = tmp3.PARTID LEFT OUTER JOIN
          (SELECT isnull(SUM(a.quantity), 0) AS sumquantity,
               a.partid
         FROM reimbursebillbody a , reimbursebillhand b
         WHERE a.billcode = b.billcode AND
               b.reimbursetype='2'AND
               b.isexecute = 1 AND
               b.billdate <= '2005-02-28'
         GROUP BY a.partid
) tmp4 ON tmp1.PARTID = tmp4.PARTID) b
on a.partid=b.partid

 

 

 

 

 

 

//ok

 

SELECT ISNULL(a.Expr1, 0) AS xh, ISNULL(b.Expr1, 0) AS jc, b.Expr1 - a.Expr1 AS qc,
      b.PARTNAME,a.rk,a.rkt,a.ck,a.ckt
FROM (SELECT isnull(tmp1.sumquantity, 0) - isnull(tmp2.sumquantity, 0)
              - isnull(tmp3.sumquantity, 0) + isnull(tmp4.sumquantity, 0) AS Expr1,
isnull(tmp1.sumquantity,0) as rk,isnull(tmp2.sumquantity,0) as ck,
isnull(tmp3.sumquantity,0) as rkt,isnull(tmp4.sumquantity,0) as ckt,
              TMP.PARTNAME, tmp.partid
        FROM (SELECT a.PARTID, a.PARTNAME
                FROM dbo.PARTSINPUTBODY a LEFT OUTER JOIN
                      dbo.PARTSINPUTHAND b ON a.BILLCODE = b.BILLCODE
                WHERE (b.BILLDATE <= '2005-02-28')
                GROUP BY a.PARTID, a.PARTNAME) tmp LEFT OUTER JOIN
                  (SELECT a.PARTID, a.PARTNAME, SUM(a.QUANTITY) AS sumquantity
                 FROM dbo.PARTSINPUTBODY a LEFT OUTER JOIN
                       dbo.PARTSINPUTHAND b ON a.BILLCODE = b.BILLCODE
                 WHERE (b.BILLDATE BETWEEN '2005-02-27' AND '2005-02-28')
                 GROUP BY a.PARTID, a.PARTNAME) tmp1 ON
              tmp.partid = tmp1.partid LEFT OUTER JOIN
                  (SELECT a.PARTID, a.PARTNAME, SUM(a.QUANTITY) AS sumquantity
                 FROM dbo.PARTSOUTPUTBODY a LEFT OUTER JOIN
                       dbo.PARTSOUTPUTHAND b ON a.BILLCODE = b.BILLCODE
                 WHERE (b.BILLDATE BETWEEN '2005-02-27' AND '2005-02-28')
                 GROUP BY a.PARTID, a.PARTNAME) tmp2 ON
              tmp.PARTID = tmp2.PARTID LEFT OUTER JOIN
                  (SELECT isnull(SUM(a.quantity), 0) AS sumquantity, a.partid
                 FROM reimbursebillbody a, reimbursebillhand b
                 WHERE a.billcode = b.billcode AND b.reimbursetype = '1' AND
                       b.isexecute = 1 AND b.billdate BETWEEN '2005-02-27' AND
                       '2005-02-28'
                 GROUP BY a.partid) tmp3 ON
              tmp.PARTID = tmp3.PARTID LEFT OUTER JOIN
                  (SELECT isnull(SUM(a.quantity), 0) AS sumquantity, a.partid
                 FROM reimbursebillbody a, reimbursebillhand b
                 WHERE a.billcode = b.billcode AND b.reimbursetype = '2' AND
                       b.isexecute = 1 AND b.billdate BETWEEN '2005-02-27' AND
                       '2005-02-28'
                 GROUP BY a.partid) tmp4 ON tmp.PARTID = tmp4.PARTID)
      a RIGHT OUTER JOIN
          (SELECT isnull(tmp1.sumquantity, 0) - isnull(tmp2.sumquantity, 0)
               - isnull(tmp3.sumquantity, 0) + isnull(tmp4.sumquantity, 0) AS Expr1,
               TMP1.PARTNAME, tmp1.partid
         FROM (SELECT a.PARTID, a.PARTNAME, SUM(a.QUANTITY) AS sumquantity
                 FROM dbo.PARTSINPUTBODY a LEFT OUTER JOIN
                       dbo.PARTSINPUTHAND b ON a.BILLCODE = b.BILLCODE
                 WHERE (b.BILLDATE <= '2005-02-28')
                 GROUP BY a.PARTID, a.PARTNAME) tmp1 LEFT OUTER JOIN
                   (SELECT a.PARTID, a.PARTNAME, SUM(a.QUANTITY)
                        AS sumquantity
                  FROM dbo.PARTSOUTPUTBODY a LEFT OUTER JOIN
                        dbo.PARTSOUTPUTHAND b ON a.BILLCODE = b.BILLCODE
                  WHERE (b.BILLDATE <= '2005-02-28')
                  GROUP BY a.PARTID, a.PARTNAME) tmp2 ON
               tmp1.PARTID = tmp2.PARTID LEFT OUTER JOIN
                   (SELECT isnull(SUM(a.quantity), 0) AS sumquantity, a.partid
                  FROM reimbursebillbody a, reimbursebillhand b
                  WHERE a.billcode = b.billcode AND b.reimbursetype = '1' AND
                        b.isexecute = 1 AND b.billdate <= '2005-02-28'
                  GROUP BY a.partid) tmp3 ON
               tmp1.PARTID = tmp3.PARTID LEFT OUTER JOIN
                   (SELECT isnull(SUM(a.quantity), 0) AS sumquantity, a.partid
                  FROM reimbursebillbody a, reimbursebillhand b
                  WHERE a.billcode = b.billcode AND b.reimbursetype = '2' AND
                        b.isexecute = 1 AND b.billdate <= '2005-02-28'
                  GROUP BY a.partid) tmp4 ON tmp1.PARTID = tmp4.PARTID) b ON
      a.partid = b.partid


      //
      {
 CREATE PROCEDURE sp_stockSFC
 @date1 datetime,
 @date2 datetime

AS

select * into tmpkk from
(

SELECT ISNULL(a.Expr1, 0) AS xh, ISNULL(b.Expr1, 0) AS jc, b.Expr1 - a.Expr1 AS qc,
      b.PARTNAME,b.partid,a.rk,a.rkt,a.ck,a.ckt
FROM (SELECT isnull(tmp1.sumquantity, 0) - isnull(tmp2.sumquantity, 0)
              - isnull(tmp3.sumquantity, 0) + isnull(tmp4.sumquantity, 0) AS Expr1,
isnull(tmp1.sumquantity,0) as rk,isnull(tmp2.sumquantity,0) as ck,
isnull(tmp3.sumquantity,0) as rkt,isnull(tmp4.sumquantity,0) as ckt,
              TMP.PARTNAME, tmp.partid
        FROM (SELECT a.PARTID, a.PARTNAME
                FROM dbo.PARTSINPUTBODY a LEFT OUTER JOIN
                      dbo.PARTSINPUTHAND b ON a.BILLCODE = b.BILLCODE
                WHERE (b.BILLDATE <= @date2)
                GROUP BY a.PARTID, a.PARTNAME) tmp LEFT OUTER JOIN
                  (SELECT a.PARTID, a.PARTNAME, SUM(a.QUANTITY) AS sumquantity
                 FROM dbo.PARTSINPUTBODY a LEFT OUTER JOIN
                       dbo.PARTSINPUTHAND b ON a.BILLCODE = b.BILLCODE
                 WHERE (b.BILLDATE BETWEEN @date1 and @date2)
                 GROUP BY a.PARTID, a.PARTNAME) tmp1 ON
              tmp.partid = tmp1.partid LEFT OUTER JOIN
                  (SELECT a.PARTID, a.PARTNAME, SUM(a.QUANTITY) AS sumquantity
                 FROM dbo.PARTSOUTPUTBODY a LEFT OUTER JOIN
                       dbo.PARTSOUTPUTHAND b ON a.BILLCODE = b.BILLCODE
                 WHERE (b.BILLDATE BETWEEN @date1 and @date2)
                 GROUP BY a.PARTID, a.PARTNAME) tmp2 ON
              tmp.PARTID = tmp2.PARTID LEFT OUTER JOIN
                  (SELECT isnull(SUM(a.quantity), 0) AS sumquantity, a.partid
                 FROM reimbursebillbody a, reimbursebillhand b
                 WHERE a.billcode = b.billcode AND b.reimbursetype = '1' AND
                       b.isexecute = 1 AND b.billdate BETWEEN @date1 AND @date2
                 GROUP BY a.partid) tmp3 ON
              tmp.PARTID = tmp3.PARTID LEFT OUTER JOIN
                  (SELECT isnull(SUM(a.quantity), 0) AS sumquantity, a.partid
                 FROM reimbursebillbody a, reimbursebillhand b
                 WHERE a.billcode = b.billcode AND b.reimbursetype = '2' AND
                       b.isexecute = 1 AND b.billdate BETWEEN @date1 AND @date2
                 GROUP BY a.partid) tmp4 ON tmp.PARTID = tmp4.PARTID)
      a RIGHT OUTER JOIN
          (SELECT isnull(tmp1.sumquantity, 0) - isnull(tmp2.sumquantity, 0)
               - isnull(tmp3.sumquantity, 0) + isnull(tmp4.sumquantity, 0) AS Expr1,
               TMP1.PARTNAME, tmp1.partid
         FROM (SELECT a.PARTID, a.PARTNAME, SUM(a.QUANTITY) AS sumquantity
                 FROM dbo.PARTSINPUTBODY a LEFT OUTER JOIN
                       dbo.PARTSINPUTHAND b ON a.BILLCODE = b.BILLCODE
                 WHERE (b.BILLDATE <= @date2)
                 GROUP BY a.PARTID, a.PARTNAME) tmp1 LEFT OUTER JOIN
                   (SELECT a.PARTID, a.PARTNAME, SUM(a.QUANTITY)
                        AS sumquantity
                  FROM dbo.PARTSOUTPUTBODY a LEFT OUTER JOIN
                        dbo.PARTSOUTPUTHAND b ON a.BILLCODE = b.BILLCODE
                  WHERE (b.BILLDATE <= @date2)
                  GROUP BY a.PARTID, a.PARTNAME) tmp2 ON
               tmp1.PARTID = tmp2.PARTID LEFT OUTER JOIN
                   (SELECT isnull(SUM(a.quantity), 0) AS sumquantity, a.partid
                  FROM reimbursebillbody a, reimbursebillhand b
                  WHERE a.billcode = b.billcode AND b.reimbursetype = '1' AND
                        b.isexecute = 1 AND b.billdate <= @date2
                  GROUP BY a.partid) tmp3 ON
               tmp1.PARTID = tmp3.PARTID LEFT OUTER JOIN
                   (SELECT isnull(SUM(a.quantity), 0) AS sumquantity, a.partid
                  FROM reimbursebillbody a, reimbursebillhand b
                  WHERE a.billcode = b.billcode AND b.reimbursetype = '2' AND
                        b.isexecute = 1 AND b.billdate <= @date2
                  GROUP BY a.partid) tmp4 ON tmp1.PARTID = tmp4.PARTID) b ON
      a.partid = b.partid


) tmmm
GO

 

      }


      if exists (select * from sysobjects where id = object_id(N'[tmpkk]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)  drop table [tmpkk]


DECLARE @RC int
DECLARE @date1 datetime
DECLARE @date2 datetime
SELECT @date1 = '2005-02-25'
SELECT @date2 = '2005-02-28'
EXEC @RC = [wy].[dbo].[sp_StockSFC] @date1, @date2
DECLARE @PrnLine nvarchar(4000)
PRINT '存储过程: wy.dbo.sp_StockSFC'
SELECT @PrnLine = ' 返回代码 = ' + CONVERT(nvarchar, @RC)
PRINT @PrnLine


select * from tmpkk

资源下载链接为: https://pan.quark.cn/s/67c535f75d4c C语言作为一门基础且强大的编程语言,在底层系统编程和算法实现方面表现卓越,其效率灵活性备受推崇。其中,“用指针实现的C语言排序算法”这一主题,融合了C语言的核心概念——指针,以及数据结构和算法的基础知识。指针是C语言的一大特色,它能够直接操作内存地址,从而为高效的数据操作提供了有力支持。在排序算法中,指针通常被用作迭代工具,用于遍历数组或链表,进而改变元素的顺序。 常见的排序算法,如冒泡排序、选择排序、插入排序、快速排序和归并排序等,都可以借助指针来实现。具体而言: 冒泡排序:通过交换相邻元素来实现排序。在C语言中,可以定义一个指向数组的指针,通过指针的递增或递减操作来遍历数组,比较相邻元素并在必要时进行交换。 选择排序:每次从剩余部分中找到最小(或最大)元素,然后将其第一个未排序的元素进行交换。指针可用于标记已排序和未排序部分的边界。 插入排序:将元素插入到已排序的部分,以保持有序性。可以使用指针跟踪已排序部分的末尾,并在找到合适位置后进行插入操作。 快速排序:采用分治策略,选择一个“基准”元素,将数组分为两部分,一部分的所有元素都小于基准,另一部分的所有元素都大于基准。这一过程通常通过递归来实现,而基准元素的选择和划分过程往往涉及指针操作。 归并排序:将数组分为两半,分别对它们进行排序,然后再进行合并。在C语言中,这通常需要借助动态内存分配和指针操作来处理临时数组。 在实现这些排序算法时,理解指针的用法极为关键。指针不仅可以作为函数参数传递,从而使排序算法能够作用于任何可寻址的数据结构(如数组或链表),而且熟练掌握指针的解引用、算术运算和比较操作,对于编写高效的排序代码至关重要。然而,需要注意的是,尽管指针提供了直接操作内存的便利,但不当使用可能会引发错误,例如内存泄漏、空指针
资源下载链接为: https://pan.quark.cn/s/f989b9092fc5 在电子设备设计中,多功能按键的实现是至关重要的技术,它能够为用户提供丰富多样的交互方式,比如单击、双击和长按等操作。本文将深入探讨如何设计一个多功能按键系统,涵盖按键识别逻辑、接口函数设计,以及如何避免使用定时器。 首先,我们需要理解多功能按键的基本原理。在硬件层面,按键通常是通过连接到微控制器(MCU)的一个输入引脚来实现的。当按键未被按下时,该引脚保持高电平;而当按键按下时,引脚会地短路,变为低电平。因此,通过检测该引脚的状态,就可以判断按键是否被按下。 接下来,我们来探讨如何识别不同的按键操作。单击是最基本的操作,通常定义为按键快速按下并释放。双击则是在短时间内连续两次单击,而长按则是按键被按下并持续一段时间。为了实现这些功能,我们需要在软件中加入一些延时处理。例如,当我们检测到按键按下事件后,可以启动一个短暂的延时。如果在此期间再次检测到按键按下,则判断为双击;如果延时结束仍未检测到第二次按下,则认为是单击。对于长按操作,可以设定一个较长的延时,如果按键在这段时间内一直保持按下状态,则识别为长按。 接口函数设计是软件工程中的重要环节。对于多功能按键,我们可以设计以下核心接口: void Key_Init(void):初始化按键,设置中断或轮询模式,并设置初始状态。 uint8_t Key_Scan(void):扫描按键状态,返回当前按键的操作类型,例如,0表示无操作,1表示单击,2表示双击,3表示长按。 void Key_Callback(uint8_t key_event):这是一个注册的回调函数,根据Key_Scan()返回的事件类型执行相应的操作。 在实际应用中,为了避免频繁的中断请求和降低功耗,我们有时会选择使用延时而非定时器。延时函数可以通过循环计数实现,例如,使用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值