如果使用內置嚮導創建Crystal報表,則會鏈接表等。什麼決定了參數是否使其成爲實際的SQL語句?另外,它爲什麼用雙引號括起所有內容?爲MS SQL生成水晶報表SQL語句
例如:
這裏將是我的基本SQL語句由CR所產生:現在
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"
,看的時候我添加以下到選擇專家編輯會發生什麼:
{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本身內解析。
有誰知道水晶究竟該怎麼做?我使用了一些大型數據庫,並且需要SQL語句中的條件,否則Crystal會返回浪費時間,內存和處理的大型數據集。
TIA。
當然,只有Crystal 9向上纔可用。並不像服務器端存儲過程那麼快。 – MartW
我明白這一點,通常會這樣做。我在Crystal外寫入所有的SQL,並使用命令對象。但是,我試圖說服員工瞭解這樣做的效率,而不是使用Crystal嚮導。這就是這個問題產生的原因。你知道Crystal如何決定添加到原始SQL語句中的內容嗎? – DavidStein
@CodeByMoonlight:假設SQL語句是相同的,我懷疑存儲過程和'原始'SQL之間的性能差異是非常顯着的。還需要考慮開發和維護SP所需的額外成本和經驗。我更喜歡自己的觀點,至少他們傾向於在多個報告中重複使用。 – craig