當前位置:首頁 » 編程語言 » sql的游標和程序設計在哪裡
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql的游標和程序設計在哪裡

發布時間: 2023-03-22 14:35:59

A. sql 存儲過程 游標用在什麼地方(新手剛學,不知道使用場景)我是C#做Web開發的

web開發很多用orm框架,存儲過程和游枝扮標都很少用。比如你用EF提倡CodeFirst,這得看你框架的規則上進行。純粹輪搭茄來講所有的sql執行語句都可以放到存儲過程里。比如insert,uodate,delete,select都可以。存儲過程有執行速度快的優勢,參數傳遞佔用空間小。同時方便後期修改和管理。比如像我現在用的一個簡單的存儲過程,返回當前客戶期數:
create proc proc_name(@account nvarchar(30))
as
begin
/*-------------------------------------------------------------------------------------
程序說明:返回當前客戶的期初數,業務結算月為26,以列印時間為准
BY:ChuiFeng 2013-02-27
返回結果:@CreditAmount欄位
-------------------------------------------------------------------------------------*/
declare @ARAmount decimal(22,10) = 0 --已經收到的客戶金額, 實收金額
declare @SaleAmount decimal(22,10) = 0 --貨物金額, 應收金額
--declare @amount decimal(22,10) =0 --存放期初
declare @endDate datetime --截止日期
--構造截止日期
if(DATEPART(DAY, GETDATE())>26) --當前日期超過結算日26號
set @endDate = CAST(CAST(DATEPART(year, GETDATE()) AS varchar(4)) + '-' + CAST(DATEPART(MONTH, GETDATE()) AS nvarchar(2)) + '-26' AS DateTime)
else
set @endDate = CAST(CAST(DATEPART(year, GETDATE()) AS varchar(4)) + '-' + CAST(DATEPART(MONTH, GETDATE())-1 AS nvarchar(2)) + '-26' AS DateTime)
select @ARAmount=SUM(Amount) from T_AR where CusCode=@account and PrintState=255 and DATEDIFF(DAY,PrintedTime,@endDate)>0
--select @SaleAmount=SUM(Amount) from T_SOs where SONO in (select SONO from T_SO where CusCode=@account and PrintState=255 and DATEDIFF(DAY,PrintedTime,@endDate)>0)
select @SaleAmount=SUM(Amount) from T_SO where CusCode=@account and PrintState=255 and DATEDIFF(DAY,PrintedTime,@endDate)>0
if(@ARAmount is null) set @ARAmount=0
if(@SaleAmount is null) set @SaleAmount=0

return @SaleAmount-@ARAmount
end

如果客戶需求發生了變化比如結算日改了,那麼我們只需要修改存儲過程就行了 而不必要修改程序代碼重新編譯。

至於游標:建議慎用 少用。主要就是性能問題。一般是在大數臘察據量循環的情況下可能用但是最好別用,用好的存儲過程可以實現就別用游標...

B. 如何使用SQL Server游標(一)

但是我們常常會遇到這樣情況,即從某一結果集中逐一地讀取一條記錄。那麼如何解決這種問題呢?游標為我們提供了一種極為優秀的解決方案。 1.游沖運悉標和游標的優點 在資料庫中,游標是一個十分重要的概念。游標提供了一種對從表中檢索出的數據進行操作的靈活手段,就本質而言,游標實際上是一種能從包括多條數據記錄的結果集中每次提取一條記錄的機制。游標總是與一條T_SQL 選擇語句相關聯因為游標由結果集(可以是零條、一條或由相關的選擇語句檢索出的多條記錄)和結果集中指向特定記錄的游標位置組成。當決定對結果集進行處理時,必須聲明一個指向該結果集的游標。如果曾經用 C 語言寫過對文件進行處理的程序,那麼游標就像您打開文件所得到的文件句柄一樣,只要文件打開成功,該文件句柄就可代表該文件。對於游標而言,其道理是相同的。可見游標能夠實現按與傳統程序讀取平面文件類似的方式處理來自基礎表的結果集,從而把表中數據以平面文件的形式呈現給程序。 我們知道關系資料庫管理系統實質是面向集合的,在MS SQL SERVER 中並沒有一種描述表中單一記錄的表達形式,除非使用where 子句來限制只有一條記錄被選中。因此我們必須藉助於游標來進行面向單條記錄的數據處理。 由此可見,游標允許應用程序對查詢語句select 返回的行結果集中每一行進行相同或不同的操作,而不是一次對整個結果集進行同一種操作;它還提供對基於游標位置而對表中數據進行刪除或更新的能力;而且,正是游標把作為面向集合的資料庫管理系統和面向行的程序設計兩悄正者聯系起來,使兩個數據處理方式能夠進行溝通。 2.游標種類 MS SQL SERVER支持三種類型的游標:Transact_SQL 游標,API 伺服器游標和客戶游標。 (1)Transact_SQL游標 Transact_SQL游標是由DECLARE CURSOR語法定義、主要用在Transact_SQL 腳本、存儲過程和觸發器中。Transact_SQL 游標主要用在伺服器上,由從客戶端發送給伺服器的Transact_SQL 語句或是批處理、存儲過程、觸發器中的Transact_SQL 進行管理。 Transact_SQL 游標不支持提取數據塊或多行數據。 (2)API 游標 API 游標支持在OLE DB, ODBC 以及DB_library 中使用游標函數,主要用在伺服器上。每一次客戶端應用程序調用API 游標函數,MS SQL SEVER 的OLE DB 提供者、ODBC驅動器或DB_library 的動態鏈接庫(DLL) 都會將這些客戶請求傳送給伺服器以對API游標進行處理。 (3)客散乎戶游標 客戶游標主要是當在客戶機上緩存結果集時才使用。在客戶游標中,有一個預設的結果集被用來在客戶機上緩存整個結果集。客戶游標僅支持靜態游標而非動態游標。由於伺服器游標並不支持所有的Transact-SQL 語句或批處理,所以客戶游標常常僅被用作伺服器游標的輔助。因為在一般情況下,伺服器游標能支持絕大多數的游標操作。 由於API 游標和Transact-SQL 游標使用在伺服器端,所以被稱為伺服器游標,也被稱為後台游標,而客戶端游標被稱為前台游標。在本章中我們主要講述伺服器(後台)游標。select count(id) from info select * from info --清除所有記錄

C. SQL中自己建的游標和索引在哪裡能看到

樓主 游標你是看不物神亮到的 游標都包含在對象里瞎吵面 比如 存儲過程
索引可以看 select * from sys.indexes
name就是索引名稱 通過id就可以找到表名 然後直接在表下面能找罩寬索引
生成創建索引腳本即可

D. 什麼是游標使用游標的基本步驟是什麼

游標(cursor)是系統為用戶開設的一個數據緩沖區,存放SQL語句的執行結果。每個游標區都有一個名字,用戶可以用SQL語句逐一從游標中獲取記錄,並賦給主變數,交由主語言進一步處理。游標提供了一敬攔種對從表中檢索出的數據進行操作的靈活手段。x0dx0a使用游標的基本步驟: x0dx0a1、聲明游標。把游標與T-SQL語句的結果集聯系起來。 x0dx0a2、打開游標。 x0dx0a3、使用游標操作數據。 x0dx0a4、關閉游標。x0dx0a功能:x0dx0a1、游標提供了一種對從表中檢索出的數據進行操作的靈活手段,就本質而言,游標實際上是一種能從包括多條數據記錄的結果集中每次提取一條記錄的機制。x0dx0a2、游標能夠實現按與傳統程序讀取平面文件類似的方式處理來自基礎表的結果集,從而把表亮察胡中數據以平面文件的形式呈現給程序。x0dx0a3、游標把作為面向集合的資料庫管理系統和面向行的程序設計兩者聯系起來,使兩個數據處理方式能夠進行溝通。x0dx0a種類:x0dx0a1、Transact_SQL游標x0dx0aTransact_SQL游標是由DECLARECURSOR語法定義、主要用在Transact_SQL腳本、存儲過程和觸發器中。Transact_SQL游標主要用在伺服器上,由從客戶沒高端發送給伺服器的Transact_SQL語句或是批處理、存儲過程、觸發器中的Transact_SQL進行管理。Transact_SQL游標不支持提取數據塊或多行數據。x0dx0a2、API游標x0dx0aAPI游標支持在OLEDB,ODBC以及DB_library中使用游標函數,主要用在伺服器上。每一次客戶端應用程序調用API游標函數,MSSQLSEVER的OLEDB提供者、ODBC驅動器或DB_library的動態鏈接庫(DLL)都會將這些客戶請求傳送給伺服器以對API游標進行處理。x0dx0a3、客戶游標x0dx0a客戶游標主要是當在客戶機上緩存結果集時才使用。在客戶游標中,有一個預設的結果集被用來在客戶機上緩存整個結果集。客戶游標僅支持靜態游標而非動態游標。由於伺服器游標並不支持所有的Transact-SQL語句或批處理,所以客戶游標常常僅被用作伺服器游標的輔助。因為在一般情況下,伺服器游標能支持絕大多數的游標操作。由於API游標和Transact-SQL游標使用在伺服器端,所以被稱為伺服器游標,也被稱為後台游標,而客戶端游標被稱為前台游標。

E. SQL游標怎麼用

具體用法如下:

1、打開sqlservermanagementstudio,選中要操作的資料庫;

2、新建一個查詢;

3、聲明一隱野個游標,以及一些需要用到的臨時變數;

4、使用游標,首先打開游標,並將游標下移一行;

5、循環取出數據,知鄭並進行相應的邏輯處理,其中的變數保存在@id和@name中;

6、每次循環的結束,要把游灶猛喊標下移;

7、要關閉游標,並釋放內存。

注意事項:游標名稱不能以@開頭。

F. 在資料庫中創建的游標在哪裡找得到

游標通常在存儲過程中有使用,豎歷創建的游標在使用余前搜完後是需要關閉和釋放
-- 關閉游標close m_cursor--釋放游標deallocate m_cursor
所以是找不到游標文件的,用完就關閉釋放了悔棗
翻翻有關游標的資料你就知道了

G. 使用游標的基本步驟是什麼

游標(cursor)是系統為用戶開設的一個數據緩沖區,存放SQL語句的執行結果。每個游標區都有一個名字,用戶可以用SQL語句逐一從游標中獲取記錄,並賦給主變數,交由棚鬧主語言進一步處理。
create proc cursorTest
@_id int=0,
@_name varchar(50)=''
as--創建游標
declare @cursor cursor--設定游標欲操作的數據集
set @cursor=cursor for
select _id,_name from users
open @cursor--打開游標
fetch next from @cursor into @_id,@_name--移動游標指向到第一條數據,提取第一條數據存放在變數中
激罩while(@@fetch_status=0)begin--如果上一次操作明和鬧成功則繼續循環
print @_name--操作提出的數據
fetch next from @cursor into @_id,@_name--繼續提下一行
end
close @cursor--關閉游標
deallocate @cursor--刪除游標

H. 如何使用SQL Server游標

關閉游標的語句很簡單:CLOSE CustomerCursor; 使用Where子句子 我們可以動態地定義游標中的Where子句的參數,例如在本例中我們是直接定義了查詢省份是北京的記錄,但也許在應用中我們要使用一個下拉式列表框,由用戶來選擇要查詢的省份,我們該怎樣做呢? 我們在前面曾經提到過,DECLARE語句的作用只是定義一個游標,在OPEN語句中這個游標才會真正地被執行。了解了這些,我們就可以很方便地實現這樣的功能,在DECLARE的Where子句中加入變數作參數,如下所示:DECLARE CustomerCursor CURSORFORSELCECT acct_no,name,balance FROM customer WHERE province=:ls_province; ∥定義ls_province的值 OPEN CustomerCursor; 游標的類型 同其它變數一樣,我們也可以定義游標的訪問類型:全局、共享、實例或局部,游標變數的命名規范建議也同其它變數一樣。--聲明游標declare my_cursor cursor keyset forselect*from info --刪除游標資源deallocate my_cursor --打開游標,在游標關閉或刪除前都有效open my_cursor --關閉游標close my_cursor --聲明局部變數declare@idint,@namevarchar(20),@addressvarchar(20) --定位到指定位置的記錄fetch absolute 56488from my_cursor into@id,@name,@addressselect@idas id,@nameas name,@addressas address --定位到當前記錄相對位置記錄fetch relative -88from my_cursor into@id,@name,@addressselect@idas id,@nameas name,@addressas address --定位到當前記錄前一條fetch prior from my_cursor into@id,@name,@addressselect@idas id,@nameas name,@addressas address --定位到當前記錄後一條fetchnextfrom my_cursor into@id,@name,@addressselect@idas id,@nameas name,@addressas address --定位到首記錄fetch first from my_cursor into@id,@name,@addressselect@idas id,@nameas name,@addressas address --定位到尾記錄fetch last from my_cursor into@id,@name,@addressselect@idas id,@nameas name,@addressas address 實例:use database1 declare my_cursor cursor scroll dynamic /**//*scroll表示可隨意移動游標指 針(否則只能向前),dynamic表示可以讀寫游標(否則游標只讀)*/forselect proctname from proct open my_cursor declare@pname sysname fetchnextfrom my_cursor into@pnamewhile(@@fetch_status=0) begin print'Proct Name: '+@pname fetchnextfrom my_cursor into@pname endfetch first from my_cursor into@pnameprint@pname/**//*update proct set proctname='zzg' where current of my_cursor *//**//*delete from proct where current of my_cursor */close my_cursor deallocate my_cursor 4.游標的高級技巧 盡管目前基於SQL語句的後台資料庫所支持的語言都大致相當,但對游標的支持卻有著一些差異,例如對滾動游標支持。所謂滾動游標,就是程序員可以指定游標向前後任意一個方向滾動。如在Informix中,您甚至還可以將游標滾向結果集開頭或末尾,使用的語句分別是FETCH FIRST,FETCH LAST、FETCH PRIOR和FETCH NEXT。當程序員用FETCH語句,其預設是指FETCH NEXT。由於滾動是在資料庫後台實現的,所以滾動游標為用戶編程提供了極大的方便。 對游標支持的另一個不同是可修改游標。上述游標的使用都是指只讀游標,而象Oracle、Sybase等資料庫卻另外支持可作修改的游標。使用這樣的資料庫,您可以修改或刪除當前游標所在的行。例如修改當前游標所在行的用戶的余額,我們可以如下操作:UPDATE customer SET balance=1000WHERECURRENTof customerCursor; 刪除當前行的操作如下: WHERECURRENTOF CustomerCursor; 但是如果您當前使用的資料庫是Sybase,您需要修改資料庫的參數,將游標可修改的值定為1,才能執行上述操作。這一賦值在連接資料庫的前後進行均可。

I. PL/SQL Developer的游標

游標的定義為:用游標來指代一個DML SQL操作返回的結果集。即當一個對資料庫的查詢操作返回一組結果集時,用游標來標注這組結果集,以後通過對游標的操作來獲取結果集中的數據信息。這里特別提出遊標的概念,是因為它在PL/SQL的編程中非常的重要。
定義游標的語法結構如下: cursor cursor_name is SQL語句; 在本文第一段代碼中有一句話如下: cursor c_emp is select * from employee where emp_id=3; 其含義是定義一個游標c_emp,代表employee表中所有emp_id欄位為3的結果集。
當需要操作該結果集時,必須完成三步:打開游標、使用fetch語句將游標里的數據取出、關閉游標。游標用來處理從資料庫中檢索的多行記錄(使用SELECT語句)。利用游標,程序可以逐個地處理和遍歷一次檢索返回的整個記錄集。 為了處理SQL語句,Oracle將在內存中分配一個區域,這就是上下文區。這個區包含了已經處理完的行數、指向被分析語句的指針,整個區是查詢語句返回的數據行集。游標就是指向上下文區句柄或指針。
1 顯示游標被用於處理返回多行數據的SELECT 語句,游標名通過CURSOR….IS 語句顯示地賦給SELECT 語句。 在PL/SQL中處理顯示游標所必需的四個步驟:
1)聲明游標;CURSOR cursor_name IS select_statement
2)為查詢打開游標;OPENcursor_name
3)取得結果放入PL/SQL變數中; FETCH cursor_name INTO list_of_variables; FETCH cursor_name INTO PL/SQL_record;
4)關閉游標。CLOSE cursor_name 注意:在聲明游標時,select_statement不能包含INTO子句。當使用顯示游標時,INTO子句是FETCH語句的一部分。
2隱式游標所有的隱式游標都被假設為只返回一條記錄。 使用隱式游標時,用戶無需進行聲明、打開及關閉。PL/SQL隱含地打開、處理,然後關掉游標。
例如: ……. SELECT studentNo,studentName INTO curStudentNo,curStudentName FROM StudentRecordWHEREname=』gg』; 上述游標自動打開,並把相關值賦給對應變數,然後關閉。執行完後,PL/SQL變數curStudentNo,curStudentName中已經有了值。

J. Sql中的游標是幹嘛的

游標(cursor)是結果集的邏輯擴展,可以看做指向結果集的一個指針,通過使用游標,應用程序可以逐行訪問並處理結果集。

ResultSet對象用於接收查詢結果,next()方法用於判斷結果集是否為空,相當於指針,指向結果集下一個數據。

(10)sql的游標和程序設計在哪裡擴展閱讀:

游標的生命周期包含有五個階段:聲明游標、打開游標、讀取游標數據、關閉游標、釋放游標。

1、聲明游標語法

DECLARE cursor_name CURSOR [ LOCAL | GLOBAL ]

[ FORWARD_ONLY | SCROLL ]
[ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ]
[ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ]
[ TYPE_WARNING ]
FOR select_statement
[ FOR UPDATE [ OF column_name [ ,...n ] ] ]

2、打開游標語法

open [ Global ] cursor_name | cursor_variable_name

3、讀取游標數據語法

Fetch[ [Next|prior|Frist|Last|Absoute n|Relative n ]from ][Global] cursor_name[into @variable_name[,....]]

4、關閉游標語法

close [ Global ] cursor_name | cursor_variable_name

5、釋放游標語法

deallocate cursor_name