SQL Server 中,對結果集及遊標的使用[總結]

來源:互聯網
上載者:User
 

一、對結果集使用的解決辦法

如何在預存程序中使用另一個預存程序的結果集,或者對動態SQL語句的執行結果再次使用,可以使用下面這樣的語句:

INSERT INTO table_name EXEC procedure_name @parameters_var

使用代碼如下:

--1 建立一個暫存資料表#tmp,表結構與目標預存程序procedure_name的返回結果集相容(相容即可,不必相同)。create table #tmp(   [columns_list])--2.1 執行預存程序,並將預存程序的返回結果集插入暫存資料表。insert into #tmp exec procedure_name @parameters_var--2.2 對於動態sql語句的執行如下(如果直接通過exec執行動態sql語句,sql語句有4k的長度限制。)insert into #tmp exec dbo.sp_executesql @querystring_var--3 現在可以使用(過濾,更改或檢索)#tmp了。if exists(select * from #tmp)    begin       --執行分支1    end else     begin       --執行分支2    end--4 最後清除暫存資料表。drop table #tmp

思路2:建立一個函數返回需要的查詢結果集,然後在預存程序中當做table使用即可。

參考來源:在預存程序中如何使用另一個預存程序返回的結果集

二、對遊標的使用嘗試

下面是使用 SQL Server 遊標的一個樣本。首先,建立測試環境:

create table #tmp( ID int ,UserName varchar(12) )GOinsert into #tmp values(1,'aaaa');insert into #tmp values(2,'bbbb');insert into #tmp values(3,'aabb');insert into #tmp values(4,'bbaa');GOselect * from #tmpGO

使用代碼如下:

alter procedure Demoasbegin    declare @tmpID int,@tmpName varchar(12);    begin try        -- 注意:有order by不能對select 語句使用括弧        declare cr cursor for select ID,UserName from #tmp order by ID;         open cr;        fetch next from cr into @tmpID,@tmpName;           -- @@fetch_status 返回當前開啟的遊標的 FETCH 語句的狀態        while(@@fetch_status=0)        begin           print convert(varchar(6),@tmpID) + @tmpName;           fetch next from cr into @tmpID,@tmpName; --讀取下一條資料           if(@tmpName = 'aabb') goto userGO;        end;        userGO: print '自訂GOTO語句跳轉';        close cr;       -- 關閉遊標        deallocate cr;  -- 釋放遊標    end try    begin catch           close cr;       -- 關閉遊標        deallocate cr;  -- 釋放遊標        print '異常處理!'    end catchend;exec Demo

參考 MSDN 資源:http://msdn.microsoft.com/zh-cn/library/ms180169.aspx

(完)

 
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.