커서

2014-04-15 5 views
0

를 작동하지 나는 다음과 같은 "단위"테이블을 가지고커서

 Description 
    ------------- 
    PERCENTAGE 
    KG * KILOMETRE 
    KG * METRE 
    KG * MILE 
    KG * YARD 
    POUND * KILOMETRE 
    POUND * METRE 
    POUND * MILE 
    POUND * YARD 
    TON * KILOMETRE 
    TON * METRE 
    TON * MILE 
    TON * YARD 
    TONNE * KILOMETRE 
    TONNE * METRE 
    TONNE * MILE 
    TONNE * YARD 
    COUNT * KILOMETRE 
    COUNT * METRE 
    COUNT * MILE 
    COUNT * YARD 

제가 DB에 %A/BPERCENTAGE에 형태 A * B의 각 단위 변환해야합니다. 나는 커서

쿼리를 사용하여 다음과 같은 코드를 작성 :

DECLARE @textToDisplay varchar(50); 
DECLARE CurrencyCursor Cursor Local 
    For SELECT Description FROM Unit; 

OPEN CurrencyCursor 

    FETCH NEXT FROM CurrencyCursor into @textToDisplay; 
    WHILE @@FETCH_STATUS = 0 
    Begin 
     @textToDisplay = 
       CASE @textToDisplay      --line 1 
        WHEN 'PERCENTAGE' THEN '%' 
        WHEN '% * %' THEN REPLACE(@textToDisplay ,' * ', '/')  --line 2 
        ELSE @textToDisplay 
       END 
     Print @textToDisplay 
     FETCH NEXT FROM CurrencyCursor into @textToDisplay; 
    End 

CLOSE CurrencyCursor --line 3 

나는 다음과 같은 오류를 얻을 :

`line 1` - Incorrect syntax near '@textToDisplay' 

`line 2` - Incorrect syntax near '@textToDisplay'. Expecting '(', or SELECT 

`line 3` - Incorrect syntax near 'CLOSE'. Expecting CONVERSATION 

꽤 오류의 원인을 이해할 수 있습니다.

+1

. 설정 기반 대안을 사용할 수있는 경우에는 커서를 사용하지 마십시오. 커서는 최후의 수단이 아니며 최후의 수단입니다. – HLGEM

답변

0
DECLARE @textToDisplay varchar(50) 
DECLARE CurrencyCursor CURSOR FOR 
SELECT Patientid FROM Patient; 

OPEN CurrencyCursor 

    FETCH NEXT FROM CurrencyCursor into @textToDisplay; 
    WHILE @@FETCH_STATUS = 0 
    Begin 
     SET @textToDisplay = 
       CASE @textToDisplay      --line 1 
        WHEN 'PERCENTAGE' THEN '%' 
        WHEN '% * %' THEN REPLACE(@textToDisplay ,' * ', '/')  --line 2 
        ELSE @textToDisplay 
       END 
     Print @textToDisplay 
     FETCH NEXT FROM CurrencyCursor into @textToDisplay; 
    End 

CLOSE CurrencyCursor 
0

당신은 세트 추가해야합니다 /를 @textdisplay 전에 라인 1에서 선택한

Set @textToDisplay = 'something' 

또는 SQL에서

select @textToDisplay = 'something' 

:

set @textToDisplay = 
     CASE @textToDisplay      --line 1 
      WHEN 'PERCENTAGE' THEN '%' 
      WHEN '% * %' THEN REPLACE(@textToDisplay ,' * ', '/')  --line 2 
      ELSE @textToDisplay 
     END 

참고 :

"DEALLOC을 잊지 마라. ATE Name_Cursor "를 입력하십시오.

2

단순히 중첩 된 바꾸기를 사용하지 않는 이유는 무엇입니까? 이것은 대부분의 definietely 커서의 일이 아니다

SELECT REPLACE(REPLACE(Description, '*', '/'), 'PERCENTAGE', '%') 
0
DECLARE @textToDisplay varchar(50); 
DECLARE CurrencyCursor Cursor Local 
    For SELECT Description FROM Unit; 

OPEN CurrencyCursor 

    FETCH NEXT FROM CurrencyCursor into @textToDisplay; 
    WHILE @@FETCH_STATUS = 0 
    Begin 
     SELECT @textToDisplay = 
       CASE @textToDisplay      --line 1 
        WHEN 'PERCENTAGE' THEN '%' 
        WHEN '% * %' THEN REPLACE(@textToDisplay ,' * ', '/')  --line 2 
        ELSE @textToDisplay 
       END 
     SELECT @textToDisplay 
     FETCH NEXT FROM CurrencyCursor into @textToDisplay; 
    End 

CLOSE CurrencyCursor --line 3