1. 程式人生 > >sql遊標使用的一個例子

sql遊標使用的一個例子

這個是原生Sql使用遊標對每次新加進來的一個區間判斷是否與資料庫中原有資料是否有重複的判斷,最終輸出1為無交集,輸出0為有交集(不是指列印)。作為遊標使用的一個例子。

--宣告一個變數
declare @waterMin as numeric;
declare @waterMax as numeric;
--宣告查詢語句
DECLARE @sql AS varchar(4000); 
SET @sql ='SELECT count(1) cout from ElectricScheme where AreaId=1 and Season=0  ';
--宣告一個遊標用來遍歷查詢到的結果
declare W_WaterMin CURSOR for select ElectricMin from ElectricScheme where AreaId=1 and Season=0  ;
declare W_WaterMax CURSOR for select ElectricMax from ElectricScheme where AreaId=1 and Season=0;
--開啟遊標
open W_WaterMin;
open W_WaterMax;
--獲取遊標指向的資料
fetch next from W_WaterMin into @waterMin;
fetch next from W_WaterMax into @waterMax;
--使用遊標遍歷集合
while @@FETCH_STATUS = 0
BEGIN
--執行具體的操作
   --IF @waterMin!=0 AND @waterMax!=260
   --BEGIN
        SET @sql 
[email protected]
+ ' and ( 260 < '+ cast(@waterMin as varchar(20)); SET @sql [email protected]+ ' or 0 > '+ cast(@waterMax as varchar(20)) +')'; --END --遊標指向下一條資料 FETCH next from W_WaterMin into @waterMin; FETCH next from W_WaterMax into @waterMax; END --執行sql語句 print @sql; SET @sql=' select COUNT(1) result from ( '
[email protected]
+' ) a inner join ( select COUNT(1) cout from ElectricScheme where AreaId=1 and Season=0 ) b on a.cout=b.cout ' print @sql; EXEC(@sql); --關閉遊標 CLose W_WaterMin; cLose W_WaterMax; --釋放遊標 DEALLOCATE W_WaterMin; DEALLOCATE W_WaterMax;