亚洲免费乱码视频,日韩 欧美 国产 动漫 一区,97在线观看免费视频播国产,中文字幕亚洲图片

      1. <legend id="ppnor"></legend>

      2. 
        
        <sup id="ppnor"><input id="ppnor"></input></sup>
        <s id="ppnor"></s>

        sql關(guān)于游標和游標、存儲過程結(jié)合具體使用

        字號:


            --關(guān)于游標的用法
            --定義 Transact-SQL 服務(wù)器游標的特性,例如游標的滾動行為和用于生成游標對其進行操作的結(jié)果集的查詢。
            --DECLARE CURSOR 接受基于 SQL-92 標準的語法和使用一組 Transact-SQL 擴展的語法。
            /*
            @@FETCH_STATUS
            返回被 FETCH 語句執(zhí)行的最后游標的狀態(tài),而不是任何當前被連接打開的游標的狀態(tài)。
            返回值 描述
            0 FETCH 語句成功。
            -1 FETCH 語句失敗或此行不在結(jié)果集中。
            -2 被提取的行不存在。
            */
            select * from dep;
            --這是定義一個游標
            declare @id int, @name varchar(20);
            declare dep_cursor cursor for
            select depid, depname from dep;
            --這是打開游標
            open dep_cursor;
            fetch next from dep_cursor into @id, @name;
            while(@@fetch_status = 0)
            begin
            --fetch next返回緊跟當前行之后的結(jié)果行,并且當前行遞增為結(jié)果行。如果 FETCH NEXT 為對游標的第一次提取操作,
            --則返回結(jié)果集中的第一行。NEXT 為默認的游標提取選項。
            fetch next from dep_cursor into @id, @name;
            print @id;
            print @name;
            end;
            --這是關(guān)閉游標
            close dep_cursor;
            --這是刪除游標
            deallocate dep_cursor;
            --這是一個將游標應(yīng)用到存儲過程的應(yīng)用
            --如果我們要返回一個游標的返回值,那么我們的游標的這個參數(shù)必須定義為 cursor varying output
            create procedure t1_cursor(@dep_cursor cursor varying output)
            as
            declare @id int, @name varchar(20);
            set @dep_cursor = cursor for select depid,depname from dep;--這句代碼是個關(guān)鍵
            open @dep_cursor;--這是打開游標
            drop procedure t1_cursor;
            go
            declare @t2_cursor cursor, @id int, @name varchar(20);
            exec t1_cursor @t2_cursor output;
            fetch next from @t2_cursor into @id, @name;
            while(@@fetch_status = 0)
            begin
            print @id;
            print @name;
            fetch next from @t2_cursor into @id, @name;
            end;
            close @t2_cursor;
            go
            /*sqlser游標一個小例子 問題描述:有以下2張表,
            現(xiàn)在希望得到這樣的數(shù)據(jù)表A里的O_Saloary加上表B的A_Salary是當前的總工資,并更新到表A。
            你可以用視圖來,表連接下就可以。
            現(xiàn)在我們考慮下讓SQL自己來處理,游標就是很好的方法。
            原理:游標就是把數(shù)據(jù)按照指定要求提取出相應(yīng)的數(shù)據(jù)集,然后逐條進行數(shù)據(jù)處理。
            1.1游標的概念
            游標(Cursor)它使用戶可逐行訪問由SQL Server返回的結(jié)果集。使用游標(cursor)的一個主要的原因就是把集合操作轉(zhuǎn)換成單
            個記錄處理方式。用SQL語言從數(shù)據(jù)庫中檢索數(shù)據(jù)后,結(jié)果放在內(nèi)存的一塊區(qū)域中,且結(jié)果往往是一個含有多個記錄的集合。
            游標機制允許用戶在SQL server內(nèi)逐行地訪問這些記錄,按照用戶自己的意愿來顯示和處理這些記錄。
            1.2 游標的優(yōu)點
            從游標定義可以得到游標的如下優(yōu)點,這些優(yōu)點使游標在實際應(yīng)用中發(fā)揮了重要作用:
            1)允許程序?qū)τ刹樵冋Z句select返回的行集合中的每一行執(zhí)行相同或不同的操作,而不是對整個行集合執(zhí)行同一個操作。
            2)提供對基于游標位置的表中的行進行刪除和更新的能力。
            3)游標實際上作為面向集合的數(shù)據(jù)庫管理系統(tǒng)(RDBMS)和面向行的程序設(shè)計之間的橋梁,使這兩種處理方式通過游標溝通起來。
            1.3 游標的使用
            講了這個多游標的優(yōu)點,現(xiàn)在我們就親自來揭開游標的神秘的面紗。
            使用游標的順序: 聲名游標、打開游標、讀取數(shù)據(jù)、關(guān)閉游標、刪除游標。
            聲明游標
            最簡單游標聲明:DECLARE <游標名>CURSOR FOR<SELECT語句>;
            其中select語句可以是簡單查詢,也可以是復雜的接連查詢和嵌套查詢
            打開游標
            非常簡單,我們就打開剛才我們聲明的游標mycursor
            OPEN mycursor
            讀取數(shù)據(jù)
            FETCH [ NEXT | PRIOR | FIRST | LAST] FROM { 游標名 | @游標變量名 } [ INTO @變量名 [,…] ]
            參數(shù)說明:
            NEXT 取下一行的數(shù)據(jù),并把下一行作為當前行(遞增)。由于打開游標后,行指針是指向該游標第1行之前,所以第一次執(zhí)行FETCH NEXT操作將取得游標集中的第1行數(shù)據(jù)。NEXT為默認的游標提取選項。
            INTO @變量名[,…] 把提取操作的列數(shù)據(jù)放到局部變量中。
            列表中的各個變量從左到右與游標結(jié)果集中的相應(yīng)列相關(guān)聯(lián)。
            各變量的數(shù)據(jù)類型必須與相應(yīng)的結(jié)果列的數(shù)據(jù)類型匹配或是結(jié)果列數(shù)據(jù)類型所支持的隱性轉(zhuǎn)換。變量的數(shù)目必須與游標選擇列表中的列的數(shù)目一致。
            關(guān)閉游標
            CLOSE mycursor
            刪除游標
            DEALLOCATE mycursor
            給出具體的例子:
            declare @id nvarchar(20) --定義變量來保存ID號
            declare @A float --定義變量來保存值
            declare mycursor cursor for select * from tb_c --為所獲得的數(shù)據(jù)集指定游標
            open mycursor --打開游標
            fetch next from mycursor into @id,@A --開始抓第一條數(shù)據(jù)
            while(@@fetch_status=0) --如果數(shù)據(jù)集里一直有數(shù)據(jù)
            begin
            select tb_b.name,(tb_b.gz + @A) from tb_b where tb_b.id = @id --開始做想做的事(什么更新呀,刪除呀)
            fetch next from mycursor into @id,@A --跳到下一條數(shù)據(jù)
            end
            close mycursor --關(guān)閉游標
            deallocate mycursor --刪除游標
            sql2005 判斷是否為 數(shù)字
            sql 判斷是否為數(shù)字
            sql語句中的isnumeric函數(shù)是用來判斷是否為數(shù)字
            舉例:
            select isnumeric(0)
            返回值為1
            select isnumeric('易心博客')
            返回值為0
            sql2005 update
            update mis.a22 set mis.a22.名稱=dm_pdtq.dm from dm_pdtq where dm_pdtq.tqmc=mis.a22.名稱
            說明,更新a22中的名稱字段為dm_pdtq.dm
            ========================================
            說明sqlserver2005分頁處理
            SELECT * FROM (select ROW_NUMBER() Over(order by bh) as rowNum, *
            from Table1) as table1
            where rowNum> 0 and rowNum<=50 (查詢第1頁到50頁)
            說明:復制表(只復制結(jié)構(gòu),源表名:a 新表名:b)
            A:select * into b from a where 1<>1
            B:select top 0 * into b from a
            說明:刪除重復記錄
            Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)
            說明:幾個高級查詢運算詞
            A: UNION 運算符
            UNION 運算符通過組合其他兩個結(jié)果表(例如 TABLE1 和 TABLE2)并消去表中任何重復行而派生出一個結(jié)果表。當 ALL 隨 UNION 一起使用時(即 UNION ALL),不消除重復行。兩種情況下,派生表的每一行不是來自 TABLE1 就是來自 TABLE2。
            B: EXCEPT 運算符
            EXCEPT 運算符通過包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重復行而派生出一個結(jié)果表。當 ALL 隨 EXCEPT 一起使用時 (EXCEPT ALL),不消除重復行。
            C: INTERSECT 運算符
            INTERSECT 運算符通過只包括 TABLE1 和 TABLE2 中都有的行并消除所有重復行而派生出一個結(jié)果表。當 ALL 隨 INTERSECT 一起使用時 (INTERSECT ALL),不消除重復行。
            注:使用運算詞的幾個查詢結(jié)果行必須是一致的
            */