2011-09-27 2 views
2

하여 커서를 결정 우리는 말 :커서 SQL 서버에서 조건

CREATE PROCEDURE SP_MY_PROC 
       (@BANKID VARCHAR(6)='') 
------------------------------- 
------------------------------- 

    DECLARE MY_CURSOR CURSOR FOR 
    SELECT ....... 

지금, 궁금 무엇인지, 우리가 cerain 조건에 따라 선택 문을 확인할 수 있습니까?

IF BANKID<>''// SELECT * FROM EMPLOYESS WHERE [email protected] to be the cursors query 
ELSE // otherwise SELECT * FROM EMPLOYEES to be the cursors query 

아니면 정적이어야합니까?

+1

조건을 자세히 알려주십시오. 어떤 유형의 조건을 추가 하시겠습니까? –

답변

2

예, 동적 SQL 사용하여이 작업을 수행 할 수

IF @BANKID<> '' 
    SET @sql = ' 
     DECLARE MyCursor CURSOR FOR 
      SELECT ...' 
ELSE 
    SET @sql = ' 
     DECLARE MyCursor CURSOR FOR 
      SELECT ...' 

EXEC sp_executesql @sql 
OPEN MyCursor 
+0

그러나 MyCursor에 대해 알지 못해서 SQL Server가 불평하지는 않습니다. MyCursor는 문자열 안에 있습니다. –

+0

@Mikayil - 연결을 닫을 때까지 범위에있는 전역 커서 (http://msdn.microsoft.com/en-us/library/ms180169.aspx)로 선언 할 수 있습니다. –

+0

실제로 전역 변수로 선언하지는 않았지만 불평하지 않았습니다. 명령이 성공적으로 완료되었습니다. –

2

이 같은 간단한 예제 인 경우는 단일 쿼리로 다시 작성하는 것이 좋습니다 :의,

DECLARE MY_CURSOR CURSOR FOR 
    SELECT * FROM EMPLOYESS WHERE [email protected] or @BANKID='' 

그리고 물론 커서가 더 큰 문제에 대한 올바른 해결책인지 여부는 언급하지 않았습니다 (커서는 SQL 기반의 솔루션 인 집합 기반 솔루션을 생각하지 않는 사람들이 자주 오용합니다).


추신 -이 저장된 발동에 액세스 할 수도 느린 있다고, 지금은 무시하고이 이름은 SQL Server에 대한 "예약", 그리고 미래의 호환성 문제를 방지하기 위해 피해야한다 (와 - sp_하여 저장 프로 시저를 접두어로 피 이러한 이름은 SQL Server가 현재 데이터베이스에서 검색하기 전에 master 데이터베이스를 검색하므로).

+0

알아,하지만 쿼리가 완전히 다릅니다. 방금 @Upendra Chaudhari의 예제로 썼습니다. 열 값을 확인하고 각 레코드의 해당 값에 따라 작업을 수행하므로 커서를 사용해야합니다. –

+1

@Mikayil - 두 개의 쿼리가 완전히 다른 조합을 찾는 것은 드뭅니다.하지만 쿼리의 결과를 소비하는 것은 결과 집합을 소비 할 수 있습니다. 쿼리를 단일 쿼리로 병합하는 것과 밀접한 관계가 없습니다. –

+0

@Damien_The_Unbeliever - 데이터베이스 응용 프로그램 개발에는 거의 사용되지 않지만 임시 또는 관리되는 많은 데이터베이스 작업이 있으며이 경우 매우 유용 할 수 있습니다. 사람들은 DB 관련 질문에 대한 첫 번째 응답이 "데이터베이스에서 그렇게하지 않아야하기 때문에 그렇게하지 않으려 고합니다"라고 생각할 때이 사실을 완전히 잊어 버린 것 같습니다. – briantyler