2009-11-12 2 views
0

내장 된 마법사를 사용하여 Crystal Report를 생성하면 테이블이 링크됩니다. 매개 변수가 실제 SQL 문에 포함 시킬지 여부를 결정합니다. 또한, 왜 모든 것이 큰 따옴표로 둘러싸여 있습니까? 예를 들어Crystal Report MS SQL 용 SQL 문 생성

:

SELECT "poitem"."fpono" 
,  "pomast"."fcompany" 
,  "pomast"."fvendno" 
,  "poitem"."fpartno" 
,  "poitem"."fitemno" 
,  "poitem"."frelsno" 
,  "poitem"."fordqty" 
,  "poitem"."frcpqty" 
,  "poitem"."fucostonly" 
,  "poitem"."flstpdate" 
FROM "M2MDATA01"."dbo"."pomast" "pomast" 
    INNER JOIN "M2MDATA01"."dbo"."poitem" "poitem" 
    ON "pomast"."fpono" = "poitem"."fpono" 

지금, 나는이 선택 전문 편집기에 다음을 추가하면 어떻게되는지보고 : 여기

은 CR에 의해 생성 된 내 기본 SQL 문이 될 것입니다

{poitem.fcategory} = "INV" and 
not ({poitem.fmultirls} = "Y" and 
{poitem.frelsno} = " 0") and 
{poitem.fordqty} > {poitem.frcpqty} and 
cdate({poitem.flstpdate}) = {?LastPromDate} and 
{poitem.forgpdate} = DateTime (2010, 10, 05, 00, 00, 00) and 
{pomast.fstatus} = "OPEN" 

나는 두 가지 다른 방법으로 날짜를 묻기 때문에 비교를 위해 forgpdate를 추가했습니다. 여기

내가 얻을 SQL이다 : 그것의 대부분은 직접 전송

SELECT "poitem"."fpono" 
,  "pomast"."fcompany" 
,  "pomast"."fvendno" 
,  "poitem"."fpartno" 
,  "poitem"."fitemno" 
,  "poitem"."frelsno" 
,  "poitem"."fordqty" 
,  "poitem"."frcpqty" 
,  "poitem"."fucostonly" 
,  "poitem"."flstpdate" 
,  "poitem"."fcategory" 
,  "poitem"."fmultirls" 
,  "pomast"."fstatus" 
,  "poitem"."forgpdate" 
FROM "M2MDATA01"."dbo"."pomast" "pomast" 
    INNER JOIN "M2MDATA01"."dbo"."poitem" "poitem" 
    ON "pomast"."fpono" = "poitem"."fpono" 
WHERE  "poitem"."fcategory" = 'INV' 
     AND("poitem"."fmultirls" <> 'Y' 
      OR "poitem"."frelsno" <> ' 0') 
     AND "poitem"."fordqty" > "poitem"."frcpqty" 
     AND("poitem"."forgpdate" >= {TS '2010-10-05 00:00:00'} 
      AND "poitem"."forgpdate" < {TS '2010-10-05 00:00:01'}) 
     AND "pomast"."fstatus" = 'OPEN' 

그러나 내 "없음"문을 변환.

또한 내 cdate 라인이 전혀 전송되지 않았지만 Crystal 내에서 해결되는지 확인하십시오.

Crystal이 어떻게 결정할지를 아는 사람이 있습니까? 일부 대형 데이터베이스를 사용하고 SQL 문에서 내 기준을 필요로합니다. 그렇지 않으면 Crystal에서 시간, 메모리 및 프로세싱을 낭비하는 거대한 데이터 집합을 반환합니다.

TIA.

답변

1

생성되는 SQL의 형식은 부분적으로 Crystal 및 데이터 공급자의 버전에 따라 다릅니다. ODBC를 사용하면이 구문이 ansi 표준이므로 항상 주위에 따옴표를 붙입니다. SQL Server 및 기타 데이터 원본에 대해보고 할 때도 마찬가지입니다. 그러나 예를 들어 Crystal 8.5에서 보고서를 만들고 SQL Server 데이터 소스 공급자를 사용하는 경우 따옴표없이 SQL을 생성합니다 (예 : 일반 SELECT MyTable.MyField from MyTable). 이 동작은 SQL Server 데이터 소스 버전 9에서 변경되었지만 전반적으로 변경되지는 않습니다. Crystal 11에서 Informix 데이터 소스에 대해 ODBC가 아닌 원시 공급자를 사용하면 위와 같이 인용 된 SQL이 생성되지 않습니다.

SQL에서 수행 할 작업을 평가하는 방법은 데이터 원본의 SQL에서 다시 쓸 수있는 양에 따라 달라집니다. Crystal 함수를 사용하는 수식 (예 : 사용한 CDate)은 일반적으로 Crystal 내에서만 평가 될 수 있습니다. 서버에서 수행하는 작업을 최대화하려면 Crystal 기능, 요약 필드 또는 Switch 문을 사용하지 마십시오. 다시 변환 할 수있는 정확한 금액은 제공 업체에 따라 다릅니다. 때때로 모든 것을 변환 할 수없는 경우도 있습니다. Server For Speed에서 인덱스를 사용하는 옵션도 있습니다.이 옵션을 사용하면 작업을 더 빨리 수행 할 수 있지만 실행되는 위치에 도움이되지 않습니다.

1

왜 모든 것이 큰 따옴표로 묶여 있습니까?

큰 따옴표는 객체 이름을 묶는 표준적인 표준 방법입니다. 회사의 테이블과 열 이름이 어딘가에서 예약 된 키워드와 충돌하지 않는지 확인하는 것은 안전한 교차 플랫폼 방식입니다.

질문의 주요 부분은 왜 변수 비교 클라이언트 쪽을하는 것 같습니다. 나는 너를 도울 수 없어 두려워. 가장 좋은 추측은 Crystal이 사용할 수있는 인덱스와 관련이 있다는 것입니다. 단, Crystal가 너무 많은 것을 알면 이상하지 않을 것입니다.

1

개별 테이블이 아닌 Command 개체를 사용하는 경우 SQL 문을보다 잘 제어 할 수 있습니다. 데이터베이스 | 데이터베이스 전문가 ... 원하는 데이터베이스 서버의 루트 권한을 확장 한 다음 '명령 추가'를 클릭하십시오. 원하는 SQL 문을 입력하십시오. 필요에 따라 매개 변수를 추가하십시오.

Command 개체에서 만든 매개 변수는 보고서 자체에서 정의한 매개 변수보다 훨씬 융통성이 없습니다. 보고서에 정의 된 추가 매개 변수는 보고서 개체에 정의 된 매개 변수 (보고서에 자동으로 추가됨) 을 선택할 수 있습니다.이 매개 변수는 보고서가 데이터베이스에서 레코드를 읽을 때 적용됩니다 (분명히 효율성이 떨어집니다).

+0

Crystal 9 이상에서만 사용 가능합니다. 그리고 서버 측 스토어드 프로 시저만큼 빠르지는 않습니다. – MartW

+0

나는 그것을 이해하고 그렇게 평범하게 할 것이다. 나는 Crystal 밖에서 모든 SQL을 작성하고 command 객체를 사용한다. 그러나, 나는 Crystal 마법사를 사용하는 것보다 그렇게하는 효율성에 대해 동료에게 확신 시키려고 노력했다. 그것이 바로이 문제가 일어난 방법입니다. Crystal가 원래 SQL 문에 무엇을 추가할지 결정하는 방법을 알고 있습니까? – DavidStein

+0

@CodeByMoonlight : SQL 문이 같다고 가정하면 저장 프로 시저와 '원시'SQL 사이의 성능 차이가 대단히 중요하지 않은지 의심 스럽습니다. 또한 SP 개발 및 유지에 필요한 추가 비용과 경험을 고려해야합니다. 나는보기를 스스로 선호한다. 적어도 그들은 여러 보고서에 재사용되는 경향이있다. – craig