報表sql儲存過程開發中十條軍規
報表sql儲存過程的特點:
通過一組變數作為輸入引數,根據行控制變數的不同,迴圈查詢,將每個查詢的結果值儲存到變數裡面,夠一組了,插入臨時表(結果表),如此反覆,直到迴圈結束。最終查詢臨時表,返回乙個結果集的游標。
報表sql儲存過程十條軍規:
1、儲存過程中要盡可能少的定義變數,能復用就復用。
2、儲存過程中兩個列相互賦值、或者是變數給臨時表中插入值的時候要注意兩個資料型別定義要完全一致。
3、儲存過程中臨時表中的列名最好不要和儲存過程中的變數名重名,否則,出現問題很難除錯發現。
4、儲存過程要注意迴圈條件的控制、對沒有分組的規律的要創造出一些規律。對於多層迴圈要注意迴圈開關控制。
5、結果集最好用臨時表儲存,在插入結果集到臨時表的時候,不要commit。否則臨時表會清空甚至被drop掉。
6、儲存過程語句一般來說越少越好,迴圈體中的sql要反覆優化,以減少表的掃瞄次數為終極目標,這樣一般能獲取更好的效能。
7、在用sum的時候,一定要注意對null值進行處理。比如為null的時候給乙個預設值0。
8、在插入字串資料的時候,一定要注意:空格、空串、null的區別,在適當的時候選擇適當的值插入。
9、機器編號應該根據程式迴圈自動生成,對於多層巢狀迴圈的儲存過程,內外層之間的邏輯關係要注意。比如內層迴圈的所得記錄只求和為外層迴圈記錄,所有外層迴圈的記錄求和為合計行值。那麼在處理的時候要通過變數記錄每次外層迴圈的一些引數,以便求和方便。
10、盡可能少的減少巢狀迴圈的次數,將迴圈次數多的細的放到最內層。游標用完後要關閉。
以上十條適合所有關係資料庫系統的sql儲存過程。
報表中如何呼叫儲存過程?
很多時候,報表設計工具在設計時所需的資料由於查詢邏輯複雜 表間關係複雜或者其他系統原因,需要使用現有資料庫中的儲存過程返回的資料來製作報表。那麼,如何在設計報表時,呼叫含引數的儲存過程呢?本文以sqlserver sales 訂單表為例,介紹實現方法。儲存工程指令碼 create proc test...
儲存過程計算報表
create procedure usp t scdd othermine ipagesize int,icurpage int,iyear int,sdwid varchar 255 with encryption as begin 建立臨時表 create table t1 fno int id...
SQL儲存過程
什麼是儲存過程呢?定義 將常用的或很複雜的工作,預先用sql語句寫好並用乙個指定的名稱儲存起來,那麼以後要叫資料庫提供與已定義好的儲存過程的功能相同的服務時,只需呼叫execute,即可自動完成命令。講到這裡,可能有人要問 這麼說儲存過程就是一堆sql語句而已啊?microsoft公司為什麼還要新增...