简体   繁体   English

sql server2005的游标

[英]cursor for sql server2005

This is my cursor procedure: 这是我的光标过程:

DECLARE C1 CURSOR LOCAL FOR 
  SELECT DISTINCT
         PPTR_MATCH_REF_NO,
         PPTR_LDGR_CODE,
         PPTR_SLMAST_ACNO,
         PPTR_PPN_STATUS
    FROM GLAS_PPN_TRANSACTIONS 
   WHERE PPTR_COMP_CODE  = @COMP_CODE
 AND ISNULL(PPTR_PPN_STATUS, 'X') = 'V'

DECLARE @MATCH_REF_NO NUMERIC(10,0),
    @LDGR_CODE    VARCHAR(MAX),
    @SLMAST_ACNO  VARCHAR(MAX),
    @PPN_STATUS   VARCHAR(2),
    @ACCT_NAME    VARCHAR(MAX)
BEGIN

  OPEN C1 

  FETCH NEXT FROM  C1 INTO @MATCH_REF_NO,@LDGR_CODE,@SLMAST_ACNO,@PPN_STATUS
    WHILE @@FETCH_STATUS =0

    BEGIN
        -- SET @MATCH_REF_NO  =  PPTR_MATCH_REF_NO 
        -- SET @LDGR_CODE  =  PPTR_LDGR_CODE 
        -- SET @SLMAST_ACNO  = PPTR_SLMAST_ACNO 

    SELECT @ACCT_NAME = COAD_PTY_FULL_NAME
      FROM GLAS_SBLGR_MASTERS,
           GLAS_PTY_ADDRESS 
     WHERE SLMA_COMP_CODE = @COMP_CODE
       AND SLMA_LDGRCTL_YEAR  = DBO.GLAS_VALIDATIONS_GET_OPEN_YEAR(@COMP_CODE) 
       AND SLMA_LDGRCTL_CODE  = @LDGR_CODE
       AND SLMA_STATUS  = 'A'
       AND SLMA_ACNO  = @SLMAST_ACNO
       AND COAD_COMP_CODE  = SLMA_COMP_CODE
       AND COAD_ADDR_ID  = SLMA_ADDR_ID

    IF @PPN_STATUS = 'V' 
        BEGIN 
            SELECT @PPN_STATUS  = 'VER' 
        END

    FETCH NEXT FROM  C1 INTO @MATCH_REF_NO,@LDGR_CODE,@SLMAST_ACNO,@PPN_STATUS              
    END
        CLOSE C1
    END
    DEALLOCATE C1
END

How can I retrive @MATCH_REF_NO , @LDGR_CODE , @SLMAST_ACNO , @PPN_STATUS and @ACCT_NAME at the same time? 如何同时检索@MATCH_REF_NO@LDGR_CODE@SLMAST_ACNO@PPN_STATUS@ACCT_NAME

here 2 select statements is there how can i combine 这里有2条select语句,我该如何结合

You can simplify this by using a common-table expression (CTE) in SQL Server 2005 - you'll get something like: 您可以通过在SQL Server 2005中使用公用表表达式(CTE)来简化此操作-您将获得类似以下内容的信息:

WITH Select1 AS
(
  SELECT DISTINCT
         PPTR_MATCH_REF_NO,
         PPTR_LDGR_CODE,
         PPTR_SLMAST_ACNO,
         PPTR_PPN_STATUS
    FROM GLAS_PPN_TRANSACTIONS 
   WHERE PPTR_COMP_CODE  = @COMP_CODE
 AND ISNULL(PPTR_PPN_STATUS, 'X') = 'V'
)
SELECT 
    COAD_PTY_FULL_NAME
FROM 
    GLAS_SBLGR_MASTERS, GLAS_PTY_ADDRESS, Select1
WHERE 
    SLMA_COMP_CODE = Select1.COMP_CODE
    AND SLMA_LDGRCTL_YEAR  = DBO.GLAS_VALIDATIONS_GET_OPEN_YEAR(Select1.COMP_CODE) 
    AND SLMA_LDGRCTL_CODE  = Select1.LDGR_CODE
    AND SLMA_STATUS  = 'A'
    AND SLMA_ACNO  = Select1.SLMAST_ACNO
    AND COAD_COMP_CODE  = SLMA_COMP_CODE
    AND COAD_ADDR_ID  = SLMA_ADDR_ID

What I cannot determine from the code you posted is how the GLAS_SBLGR_MASTERS and the GLAS_PTY_ADDRESS are joined (on what condition). 我无法从您发布的代码中确定GLAS_SBLGR_MASTERSGLAS_PTY_ADDRESS如何连接(在什么条件下)。 Just specifying these two in the FROM clause should be avoided - use the standard ANSI SQL JOIN statements: 应该避免只在FROM子句中指定这两个-使用标准的ANSI SQL JOIN语句:

FROM GLAS_SBLGR_MASTERS
INNER JOIN GLAS_PTY_ADDRESS ON ???????

Marc

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM