DBMS :Database Management System
數(shù)據(jù)模型:概念數(shù)據(jù)模型 ----設(shè)計
???????? 邏輯數(shù)據(jù)模型(關(guān)系數(shù)據(jù)模型,網(wǎng)狀數(shù)據(jù)模型,層次數(shù)據(jù)模型,)----實現(xiàn)
???????? 物理數(shù)據(jù)模型
數(shù)據(jù)模式:描述
聯(lián)系,約束并發(fā)控制:多用戶訪問共享數(shù)據(jù)的沖突問題
實體—聯(lián)系:er模型
rdbms (關(guān)系數(shù)據(jù)庫)???? :? sql server ,oracle ,db/2,sybase,informix
Non-rdbms (file-based) :? foxpro,access
客戶端網(wǎng)絡(luò)實用工具(Client Network Utility):用來配置客戶端的網(wǎng)絡(luò)連接,管理和測定客戶端的數(shù)據(jù)庫。
事件探察器:監(jiān)視事件處理日志,并對日志進行分析和重播。
服務(wù)端網(wǎng)絡(luò)實用工具(Server Network Utility):配置服務(wù)器端網(wǎng)絡(luò)連接和設(shè)置相關(guān)參數(shù)。
導入和導出數(shù)據(jù)(Imput and Export Data):采用DTC(data transformation services)向?qū)硗瓿桑瑢崿F(xiàn)其他數(shù)據(jù)和SQL 2000數(shù)據(jù)的轉(zhuǎn)換。
企業(yè)版:win2000 advanced server
標準版:win2000 server
首要數(shù)據(jù)文件 .mdf
次要數(shù)據(jù)文件 .ndf
日志文件???? .ldf
windows身份驗證模式 比 混合模式具有更高的安全性,windows身份驗證模式下必須是本地用戶和域用戶才能使用SQL Server 2000
升級SQL SERVER:備份(包括系統(tǒng)庫在內(nèi)的)所有數(shù)據(jù)庫,備份注冊表
日志文件:
sqlstp.log?? 在\windows或\winnt下
setup.log??? 在\windows或\winnt下
searchsetup.log? 在\winnt\temp下
errorlog???? 在mssql\log下
系統(tǒng)數(shù)據(jù)庫:
master:
model:? 是用戶數(shù)據(jù)庫和tempdb數(shù)據(jù)庫的摸板數(shù)據(jù)庫,是創(chuàng)建新數(shù)據(jù)庫的摸板
msdb:?? 是代理服務(wù)數(shù)據(jù)庫
tempdb: 臨時數(shù)據(jù)庫,默認大小8mb,為臨時操作提供存儲空間
pubs:?? 示范學習
系統(tǒng)表:
(
sysobjects表
syscolumns表
sysindexes表
sysusers表
sysdatabases表
sysdepends表
sysconstraints表
)
(主關(guān)鍵字(主鍵):
候選關(guān)鍵字:
公共關(guān)鍵字:
外關(guān)鍵字:確定主表和從表)
數(shù)據(jù)庫對象:
(
表
索引
視圖:其實是虛表,是查詢表產(chǎn)生的
圖表:是表之間的關(guān)系示意圖
確省值:
規(guī)則:
觸發(fā)器:
存儲過程:
用戶:
)
范式:構(gòu)造數(shù)據(jù)庫必須遵守的規(guī)則,目前關(guān)系數(shù)據(jù)庫有6種范式,第一范式(1NF)....,一般需要滿足3NF
SQL(structured query language)結(jié)構(gòu)化查詢語言
9種語句
(
數(shù)據(jù)查詢:select
數(shù)據(jù)定義:create,drop(刪除),alter(修改)
數(shù)據(jù)操作:insert,update,delete
數(shù)據(jù)控制:grant,revoke
)
SQL語言分類:
(
數(shù)據(jù)定義語言(dll),用于定義數(shù)據(jù)結(jié)構(gòu)
數(shù)據(jù)控制語言(dml),用于檢索和修改數(shù)據(jù)結(jié)構(gòu)
數(shù)據(jù)控制語言(dcl),用于規(guī)定數(shù)據(jù)庫用戶的權(quán)限
數(shù)據(jù)庫事務(wù)處理,用來保證數(shù)據(jù)庫的完整性
)
常用dll語句:
(
create table
create index
drop table??? 刪除數(shù)據(jù)庫表
drop index
truncate????? 刪除表中所有的行
alter table?? 增加表列,重定義表列,更改存儲分配
alter table add constraint?? 在已有的表上增加約束
)
常用dml語句:
(
insert
delete
update
selete
)
常用dcl語句:
(
grant? 將權(quán)限或角色授予用戶或其他角色
revoke 從用戶或數(shù)據(jù)庫角色回收權(quán)限
set role? 禁止或允許角色
)
事務(wù)處理語句:
(
commit work? 把當前事務(wù)所作的更改永久化
rollback???? 作廢上次提交以來的所有更改
)
數(shù)據(jù)表名稱 as 數(shù)據(jù)表別名,如果已經(jīng)給表定了別名,在T-SQL語句中應引用別名,而不能用數(shù)據(jù)表名
select e.id,e.name from 用戶表 as e
select [all | distinct] [top n] selectlist [into[NewtAbleName]]? //distinct:無重復的,selectlist:可以是表達式
? from {TableName | ViewName,....}
where? conditions
[group by group_by_list]? // 分組?
[having conditions]?????? // 分組條件
[order by order_by_list [asc | desc]]
select cost*quantity as sum
select 數(shù)據(jù)表 join on (員工數(shù)據(jù)表.員工編號=項目數(shù)據(jù)表.負責人)???? //聯(lián)接條件
嵌套select:
select table1.a,tmptable.b
from table1,
(select table2.c,table2.d
from table2
where table2.id>2) as tmptable
where table1.id=tmptable.id
where:
比較:<,<=,>,>=,=,!=,!<,!>
范圍:between a and b , not between a and b
可選擇:in,not in
模式匹配:like,not like
是否空值:is null,is not null
邏輯:and,or,not
like通配符:
%? : like 'wang%'??? like '%yi'??
-? : like '_angyi'???
[]? :like '[a-z]angyi'
[~] :like '[~w]angyi'
in的用例:
select name
? from table
where id in ('4','20')
escape的用例:
select *
? from table
like 'wang#_yi' escape '#'
select id,count(*)
? from table
where wage>=6000
group by id
//group by 對查詢結(jié)果分組
select id,name
? from table
where level='2'
group by id,name???? //先按id分,在按name分
with cube??????????? //對group產(chǎn)生的組再按組統(tǒng)計
with rollup????????? //只返回第一個分組條件下的再按組統(tǒng)計
having 指定分組搜索條件,通常與group by一起用
having count(*)>1
select *
? from table
where col like '%50[%]%'? 返回包含50%的字符串
asc:升續(xù)
//compute計算? avg,sum,min,max,count (都會忽律null)
select id,wage
?? from table
order by 部門
compute sum(wage) by 部門
count(distinct 列名)
union
子查詢中一般不用Order by子句,Order by子句用于最終的結(jié)果
>all,<all,
<>all等價于not in
>some,<some
=some 等價于in? <>some等價于 not in
不要把If..exists和聚合函數(shù)一起使用
數(shù)據(jù)完整性:
實體完整性---表中數(shù)據(jù)的唯一性
區(qū)域完整性---字段數(shù)據(jù)范圍的完整性
參考完整性----表與表之間關(guān)聯(lián)的完整性
使用者定義的完整性----用戶自己定義的完整性。如:客戶欠6個月的錢,下次再下定單的時候就不賣給他。
數(shù)據(jù)庫分離:使用SQL語句分離為EXEC sp_detach_db ‘銷售數(shù)據(jù)庫’?指明欲分離的數(shù)據(jù)庫名稱即可。分離后想再用該數(shù)據(jù)庫,則需要附加該數(shù)據(jù)庫,具體SQL語句為:
CREATE? DATABASE 銷售數(shù)據(jù)庫 ON PRIMARY(FILENAME=’C:\SQLTEST\銷售數(shù)據(jù)文件_1。MDF’)
FOR? ATTACH 或者使用sp_attach_db系統(tǒng)存儲過程來附加數(shù)據(jù)庫:
sp_attach_db? 銷售數(shù)據(jù)庫
‘C:\SQLTEST\銷售數(shù)據(jù)文件_1.MDF’
?UNIQUE 和Primary key的差異
1、? UNIQUE允許輸入NULL值(最多為一個),而Primary key不允許;
2、? 一個數(shù)據(jù)表中可以定義多個UNIQUE條件約束,但只能定義一個Primary key條件約束。
CHECK約束可用來限制字段值是否在所允許的范圍內(nèi),例如:
CREATE TABLE 客戶02
(
客戶編號 int IDENTITY? NULL? UNIQUE,
身份證號 char[10] NOT NULL? UNIQUE,
年齡? int? CHECK (年齡>0) DEFAULT 2
)
建立計算列:
CREATE TABLE 估價
(
編號? int? IDENTITY,?????????????? //自動編號
單價? numeric(5,1),
數(shù)量? int,
總價? AS 單價*數(shù)量
)
insert 估價 values(21.5,8)
insert 估價 values(12,3)
delete from 估價 where 編號=5 or 編號=6
drop table 估價
創(chuàng)建約束字段:
Create table 客戶
{
客戶編號? int? IDENTITY? Primary Key,------------------------IDENTITY自動產(chǎn)生編號
身份證號? char 18? NOT NULL UNIQUE,
地址????? char(50),
電話????? char (12),
雜志編號? int? REFERENCES 雜志種類(雜志編號),
訂單編號? int? NOT NULL,FOREIGN Key(雜志編號,訂戶編號)
REFERENCES? 雜志訂戶(雜志編號,訂戶編號),
Check(地址 is NOT NULL? OR 電話? is? NOT NULL)
}
修改數(shù)據(jù)表:
ALTER TABLE 客戶A
ADD
類別編號 int
DEFAULT 1 WITH VALUES
CONSTRAINT? FK_類型編號
FOREIGN KEY
REFERENCES? 客戶類別(類別編號)
刪除約束字段:
ALTER TABAL訂購項目A
DROP CONSTRAINT PK_訂購項目A
下面刪除訂購項目A的兩個字段
ALTER TABLE 訂購項目A
DROP COLUMN 定單編號,項目編號
激活/關(guān)閉約束
ALTER TABLE table
{ CHECK | NOCHECK} CONSTRAINT
{ALL | constrant_name{,…….n}}
臨時數(shù)據(jù)表以#或##開頭,用戶斷開連接后表被自動刪除
數(shù)據(jù)表中字段的種類:
Primary key,? Foreign Key,? NULL,? NOT NULL,? DEFAULT,? UNIQUE,? CHECK
用查詢結(jié)果建立新數(shù)據(jù)表
Select * into? newtablename? from table_source where 條件
重復記錄采用DISTINCT來獲取單獨的數(shù)據(jù)。
TOP? N 為顯示前N個數(shù)據(jù),TOP? N? 30? PERSENT * FROM 表名
表示顯示N的前30%的數(shù)據(jù)
?ORDER BY 按什么方式排序顯示結(jié)果,ASC升DESC降
?JOIN :SELECT? A,B,C? FROM? T1? JOIN? T2? ON? T1.NO=T2.NO
JOIN 的類型有多種:INNER(默認)LEFT(以左邊為條件,如果右邊沒有符合的條件,則以NULL)
??????? SELECT 旗.產(chǎn)品名稱AS旗旗公司產(chǎn)品名稱,旗.價格,標.成品名稱AS標標公司產(chǎn)品名稱,標.價格 FROM 旗旗公司 AS 旗 LEFT JOIN 標標公司AS標 ON旗.產(chǎn)品名稱=標產(chǎn)品名稱 RIGHT(以右邊為條件,如果左邊沒有符合的條件,則以NULL)FULL(左邊右邊都顯示,如果沒有則以NULL) CROSS(將兩個表的數(shù)據(jù)進行比較,全部顯示出來)
有時需要自己JOIN自己
SELECT 員工.姓名,員工.職位,長官.姓名AS主管
FROM 員工 LEFT JOIN 員工AS 長官
ON 員工.主管編號=主管.編號 姓名 職位 主管
?1
?a
?b
?c
?2
?d?
e?
NULL
GROUP BY 按什么分組顯示
UNION把兩個查詢結(jié)果合并到一個表中顯示出來查詢時Group的使用,?
Select name? AS名稱,Sum(Quantity)數(shù)量? Form? table? Group? By? name
GROUP BY后面如果有WITH CUBE則把各個組進行匯總計算后顯示結(jié)果?
查詢:select name? AS出版社名稱,bookname AS 書名,sum(quantity) AS 數(shù)量 from table group by name,bookname with cube
查詢時改變要顯示的數(shù)據(jù):(1代表“男”,0代表“女”)要求查詢時如果是1則顯示“男”,否則顯示“女”
Select name? AS 姓名,case? sex? when? 0? then “女” else? “男”? End? AS 性別? From? table
?比較清單有:IN,ALL,ANY(SOME)結(jié)果為TRUE或FALSE
測試存在用EXISTS結(jié)果返回TRUE,F(xiàn)ALSE
?索引分為聚集索引和非聚集索引
聚焦索引數(shù)據(jù)的存放會依照該索引的順序來存放
非聚焦索引數(shù)據(jù)的存放不會依照索引的順序來存放
因為非聚焦索引不影響數(shù)據(jù)排列順序,則可以設(shè)置多個非聚焦索引,而聚焦索引則最多只能設(shè)置一個,因為實際數(shù)據(jù)只能有一種排列順序。
(Unique index)索引值是否唯一:如果索引值為唯一,則成為唯一索引
多個字段做為索引稱為復合索引(Composite index)
Create? [UNIQUE]? -----指定唯一
CREATE? TABLE? t
(
ProductID? smallint? not null? primary key,
ProductName?? char(30),
Price?? smallmoney,
Manufacturer?? char(30)
)?????????
//創(chuàng)建索引
CREATE??UNIQUE???NONCLUSTERED????INDEX????indexname
ON???t?(Price?? DESC)
WITH???? PAD_INDEX, FILLFACTOR=30,IGNORE_DUP_KEY
//刪除索引
DROP? INDEX?? table.index_name
//修改索引
使用DROP_EXISTING修改索引,如果要修改索引,只要在CREATE??? INDEX語句的最后加上DROP_EXISTING即可(如果存在該索引,則修改之,否則會發(fā)生錯誤)
使用DBCC? DBREINDEX重建索引
如果只想重建索引(而不修改索引的相關(guān)設(shè)置),那么使用DBCC? DBREINDEX語句比較方便,而且使用時也可指定重建的填充因子。
DBCC DBREINDEX(’database_name.owner.table_name’,? index_name,?? fillfactor)數(shù)據(jù)庫? 數(shù)據(jù)庫所有者 表名? 重建的索引名 設(shè)置新的填充因子[WITH? NO_INFOMSGS]?? -------有此項,則重建索引不會顯示出信息
?存儲過程
系統(tǒng)存儲過程都是以 sp_開頭
擴展存儲過程通常以xp_開頭
EXECUTE 執(zhí)行存儲過程或SQL字符串(EXEC)
EXEC? 存儲過程名?? 參數(shù)1?? 參數(shù)2?? 參數(shù)3……
?變量的聲明:
DECLARE? @A? int -------------- 生命了一個為int 類型的A 變量。
建立存儲過程
使用CREATE? PROC或者CREATE? PROCEDURE + 過程名 + AS +SQL語句
CREATE? PROC? MyProcl
AS? SELECT * FROM 標標公司? WHERE 價格 >5
GO
EXEC MyProcl
EXEC? lookup? ‘楊小雄’,@地址 OUTPUT---OUTPUT表示參數(shù)的值是可以返回的
一個存儲過程為一個批,因此在查詢分析器中遇到GO時,表示存儲過程的定義已結(jié)束.在存儲過程中,有些創(chuàng)建對象的語句不可使用
CREATE? DEFAULT?????? CREATE? TRIGGER
CREATE? PROCEDURE??? CREATE? VIEW
CREATE? RULE
臨時存儲過程分為局部和全局
局部要以#開頭
全局要以##開頭
修改存儲過程ALTER PROC
刪除存儲過程DROP PROC
建立函數(shù)CREATE? FUNCTION????????????????????
修改函數(shù)?ALTER? FUNCTION?????????????
刪除函數(shù)DROP? FUNCTION
返回單個數(shù)據(jù)的函數(shù)和一般函數(shù)一樣
返回大量數(shù)據(jù)集的函數(shù)如下例:
CREATE FUNCTION 依售價查詢書籍
(@由 money,? @到money)
RETURNS TABLE
RETURN? (SELECT 書籍編號,書籍名稱,單價 FROM 書籍 WHERE 單價>=@由AND單價<=@到)
GO
SELECT * FROM依售價查詢書籍(400,500)
ORDER? BY? 單價
在調(diào)用系統(tǒng)內(nèi)置的函數(shù)時,需要加上?? ::如:SELECT * FROM ::fn_helpcollations()在創(chuàng)建表時可以使用這些函數(shù)。
?函數(shù)分為確定性函數(shù)和非確定性函數(shù)
確定性函數(shù)為當傳入的參數(shù)不變時,返回值不變,而非確定性函數(shù)為傳入?yún)?shù)不變,但每次返回的值會改變(如:GETDATE()函數(shù))
?觸發(fā)器(Trigger)是一種與數(shù)據(jù)表緊密結(jié)合的存儲過程,當該數(shù)據(jù)表有新建(INSERT)更改(UPDATE)或刪除(DELETE)事件發(fā)生時,所設(shè)置的觸發(fā)器會自動被執(zhí)行,以進行數(shù)據(jù)完整性,或其他一些特殊的數(shù)據(jù)處理工作。
觸發(fā)器是針對單一數(shù)據(jù)表所撰寫的特殊存儲過程。觸發(fā)器的種類與操作:觸發(fā)器分為2類
AFTER觸發(fā)器:這類觸發(fā)器要在數(shù)據(jù)已變動完成之后(AFTER),才會被激活并進行必要的善后處理或檢查。若發(fā)現(xiàn)錯誤,則可用ROLLBACK? TRANSATION回滾全部數(shù)據(jù)。
INSTEAD? OF觸發(fā)器:INSTEAD? OF 是取代的意思,就是這類觸發(fā)器會取代原本要進行的操作(例如新建或更改數(shù)據(jù)庫操作),因此會在數(shù)據(jù)變動前就發(fā)生,而且數(shù)據(jù)要如何變動也完全取決于觸發(fā)器。(該觸發(fā)器能應用與數(shù)據(jù)表與視圖)
建立觸發(fā)器
CREATE? TRIGGER? trigger_name
ON? {table|view}
[with? encryption]??????? ------加密
{FOR|AFTER|INSTEAD OF}? ------FOR和AFITER都是要等到數(shù)據(jù)完全操作完后才激活觸發(fā)器,INSTEAD OF則表示要建立INSTEAD OF觸發(fā)器,此時觸發(fā)器將取代原來要執(zhí)行的數(shù)據(jù)操作。
{[DELETE][,][INSERT][,][UPDATE]}-----指定觸發(fā)器的觸發(fā)操作,必須指定一個,多個時以逗號隔開,在同一數(shù)據(jù)表中,AFTER觸發(fā)器數(shù)目沒有限制;但對INSTEAD OF 觸發(fā)器來說則限制DELETE、INSERT、UPDATE每項最多只能有一個。
AS
Sql_statements??? ------用來定義觸發(fā)器的內(nèi)容。
例如:下面對一個表建立2個觸發(fā)器:
CREATE? TRIGGER? 訂單修改通知
ON? 訂單
AFTER? INSERT ,UPDATE
AS
PRINT? ‘又有訂單被修改了!’
GO
CREATE TRGGER 訂單刪除通知
ON? 訂單
AFTER? DELETE
AS
PRINT? ‘又有訂單被刪除了!’
GO
INSERT 訂單(日期,客戶編號)
Values(‘2000/1/1’,3)
Delete訂單
Where 日期=‘2000/1/1’
?刪除觸發(fā)器:DROP? TRIGGER? trigger_name
?事務(wù)通常是由BEGIN? TRAN 語句開始,一直執(zhí)行到COMMIT? TRAN或ROLLBACK? TRAN語句時才結(jié)束。
當執(zhí)行完事務(wù)中的最后一項數(shù)據(jù)庫的操作后,若沒有任何錯誤,我們可以用COMMIT TRAN提交事務(wù)。反之,若發(fā)現(xiàn)在事務(wù)中有任何的錯誤,則執(zhí)行ROLLBACK? TRAN取消事務(wù),并回滾至事務(wù)執(zhí)行前的狀態(tài)。
每執(zhí)行完一項數(shù)據(jù)庫的操作后,要立即檢查@@ERROR和@@ROWCOUNT,否則再執(zhí)行下一項數(shù)據(jù)庫操作時,這2個系統(tǒng)變量將會被新的值代替。在更改或刪除數(shù)據(jù)時,若因指定條件不符或其他原因而沒有更改到任何一條記錄,由于這種情況并不是錯誤(@@ERROR仍為0),因此我們還要檢查@@ROWCOUNT的更改條數(shù),以確定數(shù)據(jù)已正確更改。
?無論是COMMIT TRAN還是ROLLBACK TRAN而結(jié)束的事務(wù)后,如果后面還有其他未執(zhí)行的語句,則還會繼續(xù)執(zhí)行這些語句,直到批結(jié)束。不過已COMMIT的事務(wù)就無法再ROLLBACK了,同理,已ROLLBACK的事務(wù)也無法再COMMIT了。
?在事務(wù)中,把事務(wù)中所有的語句看成是一個數(shù)據(jù)處理單元,因此單元必須全部做完或全部不做。
?事務(wù)的4大特性:
1,? 原子性:整個事務(wù)被看成一個執(zhí)行單元,要么全部成功,要么全部取消。
2,? 一致性:當事務(wù)完成后,數(shù)據(jù)庫的內(nèi)容必須全部更新妥當,而且仍然具備正確性及完整性。
3,? 隔離性:在事務(wù)中所使用到的數(shù)據(jù),必須與其他同時在進行的事務(wù)適度隔離(使用鎖定數(shù)據(jù)的方法來隔離事務(wù))
4,? 永久性:事務(wù)一旦提交后,其所作的數(shù)據(jù)修改將被視為永久性的,無法再用ROLLBACK回滾了。
事務(wù)是以連接為單位,每個連接都可以有自己的事務(wù)。
事務(wù)的執(zhí)行有3種模式:
1,? 外顯事務(wù)2,? 自動提交事務(wù)3,? 隱含事務(wù)
嵌套事務(wù)是以最外層的事務(wù)為提交或回滾對象的。
雖然嵌套事務(wù)是以最外層為提交對象的,但其中的每個事務(wù)都有自己的BEGIN TRAN 和COMMIT
其實事務(wù)是為存儲過程而設(shè)計的,因為這樣我們就可以在存儲過程中撰寫事務(wù)程序,而不用擔心該程序被調(diào)用時是否已在另一個事務(wù)之中。
?@@TRANCOUNT事務(wù)計數(shù)
無論是那里調(diào)用ROLLBACK,都會跳轉(zhuǎn)到最外層的BEGIN TRAN處,@@TRANCOUNT都會變?yōu)?。‘
有時在事務(wù)中發(fā)生錯誤時,我們希望只要回滾一小部分就可以了
則用SAVE TRANSACTION來設(shè)置“事務(wù)保存點”,然后在必要時使用ROLLBACK來回滾到所保存的位置,而不會中斷事務(wù)。
ROLLBACK 后的事務(wù)名稱只能是由SAVATRAN或最外層的BEGIN TRAN所聲明的事務(wù)名稱。
游標的狀態(tài):
1
?Cursor已打開,其內(nèi)有0,1或多條記錄
?0
?Cursor已打開,但確定其內(nèi)沒有查詢到任何一條信息記錄
?-1
?Cursor已關(guān)閉
?-2
?Cursor變量名未參照到時間Cursor或參照的Cursor已被DeAllocale
?-3
?指定的游標變量名不存在
?
Cursor主要是使用于SQL批、存儲過程和出發(fā)器中。
游標的格式:
DECLARE? 游標名? CURSOR? -------聲明游標
FOR? SELECT 姓名? FROM 通訊薄? WHERE 地址=臺北??? -------------游標的數(shù)據(jù)來源
OPEN 游標名?? -----------打開游標
DECLARE? @name? varchar(20)
FETCH? NEXT? FROM? 游標名???? ------------將第一條數(shù)據(jù)存入@name
INTO? @name
WHILE(@@FETCH_STATUS=0)????? -------------判斷是否讀到數(shù)據(jù),0表示讀到數(shù)據(jù)
BEGIN
???FETCH? NEXT? FROM 游標名
?? INTO? @name
END
CLOSE? 游標名?? ----------------關(guān)閉游標與數(shù)據(jù)的關(guān)聯(lián)
DEALLOCATE? 游標名? ---------------將游標對象刪除
除了Cursor中FETCH數(shù)據(jù)外,可以通過Cursor來UPDATE或DELETE一條目前所指定的記錄
UPDATE 標標公司?? SET 價格=100? WHERE CURRENT? OF? 游標名
DELETE 標標公司?? WHERE CURRENT? OF? 游標名
范例:
DECLARE? MyCursor? CURSORLOCAL?? SCROLL_LOCKS
FOR? SELECT 價格FROM? 標標公司
FOR? UPDATE
OPEN? MyCursor
DECLARE? @money?? money
FETCH? MyCursor? INTO @money
WHILE(@@FETCH_STATUS=0)
BEGIN
????IF? @money<=10
??????BEGIN
?????????SET @money=money*1.1
???????????????UPDATE? 標標公司
???????????????SET 價格=@money?????????????? -----------------更新價格信息
???????????????WHERE?? CURRENT OF MyCursor
???????END
FETCH? MyCursor? INTO @money
END
游標變量,使用SET將已經(jīng)聲明好的游標給游標變量。在使用上,游標變量和游標是一樣使用的
全局游標和本地游標有相同的變量時,以本地游標為優(yōu)先調(diào)用
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?