第一篇:存儲過程的優缺點個人總結
優點
1.在生產環境下,可以通過直接修改存儲過程的方式修改業務邏輯(或bug),而不用重啟服務器。但這一點便利被許多人濫用了。有人直接就在正式服務器上修改存儲過程,而沒有經過完整的測試,后果非常嚴重。
2.執行速度快。存儲過程經過編譯之后會比單獨一條一條執行要快。但這個效率真是沒太大影響。如果是要做大數據量的導入、同步,我們可以用其它手段。
3.減少網絡傳輸。存儲過程直接就在數據庫服務器上跑,所有的數據訪問都在服務器內部進行,不需要傳輸數據到其它終端。但我們的應付服務器通常與數據庫是在同一內網,大數據的訪問的瓶頸會是硬盤的速度,而不是網速。
4.能夠解決presentation與數據之間的差異,說得文藝青年點就是解決OO模型與二維數據持久化之間的阻抗。領域模型和數據模型的設計可能不是同一個人(一個是SA,另一個是DBA),兩者的分歧可能會很大——這不奇怪,一個是以OO的思想來設計,一個是結構化的數據來設計,大家互不妥協——你說為了軟件的彈性必須這么設計,他說為了效率必須那樣設計,為了抹平鴻溝,就用存儲過程來做數據存儲的邏輯映射(把屬性映射到字段)。好吧,臺下已經有同學在叨咕ORM了。
5.方便DBA優化。所有的SQL集中在一個地方,DBA會很高興。這一點算是ORM的軟肋。不過按照CQRS框架的思想,查詢是用存儲過程還是ORM,還真不是問題——DBA對數據庫的優化,ORM一樣會受益。況且放在ORM中還能用二級緩存,有些時候效率還會更高。
缺點
1.SQL本身是一種結構化查詢語言,加上了一些控制(賦值、循環和異常處理等),但不是OO的,本質上還是過程化的,面對復雜的業務邏輯,過程化的處理會很吃力。這一點算致命傷。
2.不便于調試。基本上沒有較好的調試器,很多時候是用print來調試,但用這種方法調試長達數百行的存儲過程簡直是噩夢。好吧,這一點不算啥,C#/java一樣能寫出噩夢般的代碼。
3.沒辦法應用緩存。雖然有全局臨時表之類的方法可以做緩存,但同樣加重了數據庫的負擔。如果緩存并發嚴重,經常要加鎖,那效率實在堪憂。
4.無法適應數據庫的切割(水平或垂直切割)。數據庫切割之后,存儲過程并不清楚數據存儲在哪個數據庫中。
5.精通SQL的新手越來越少——不要笑,這是真的,我面試過N多新人,都不知道如何創建全局臨時表、不知道having、不知道聚集索引和非聚集索引,更別提游標和提交叉表查詢了。好吧,這個缺點算是湊數用的,作為屌絲程序員,我們的口號是:沒有不會的,只有不用的。除了少數有語言潔癖的人,我相信精通SQL只是時間問題。
總結
存儲過程最大的優點是部署的方便性——可以在生產環境下直接修改——雖然濫用的后果很嚴重。
存儲過程最大的缺點是SQL語言本身的局限性——我們不應該用存儲過程處理復雜的業務邏輯——讓SQL回歸它“結構化查詢語言”的功用吧。
第二篇:存儲過程中的優缺點個人總結
存儲過程中的優缺點個人總結
公司的系統是自主開發的,歷史比較悠久,有不少是傳統C/S架構,采用存儲過程來處理業務邏輯。
近來做新系統的時候,我采用了三層架構,拋棄存儲過程改用ORM。有同事問及不用存儲過程的理由,我想了一下,對存儲過程做了如下總結。本人經驗和水平有限,總結有所偏頗,還請大家糾察。
優點
1.在生產環境下,可以通過直接修改存儲過程的方式修改業務邏輯(或bug),而不用重啟服務器。但這一點便利被許多人濫用了。有人直接就在正式服務器上修改存儲過程,而沒有經過完整的測試,后果非常嚴重。
2.執行速度快。存儲過程經過編譯之后會比單獨一條一條執行要快。但這個效率真是沒太大影響。如果是要做大數據量的導入、同步,我們可以用其它手段。
3.減少網絡傳輸。存儲過程直接就在數據庫服務器上跑,所有的數據訪問都在服務器內部進行,不需要傳輸數據到其它終端。但我們的應付服務器通常與數據庫是在同一內網,大數據的訪問的瓶頸會是硬盤的速度,而不是網速。
4.能夠解決presentation與數據之間的差異,說得文藝青年點就是解決OO模型與二維數據持久化之間的阻抗。領域模型和數據模型的設計可能不是同一個人(一個是SA,另一個是DBA),兩者的分歧可能會很大——這不奇怪,一個是以OO的思想來設計,一個是結構化的數據來設計,大家互不妥協——你說為了軟件的彈性必須這么設計,他說為了效率必須那樣設計,為了抹平鴻溝,就用存儲過程來做數據存儲的邏輯映射(把屬性映射到字段)。好吧,臺下已經有同學在叨咕ORM了。
5.方便DBA優化。所有的SQL集中在一個地方,DBA會很高興。這一點算是ORM的軟肋。不過按照CQRS框架的思想,查詢是用存儲過程還是ORM,還真不是問題——DBA對數據庫的優化,ORM一樣會受益。況且放在ORM中還能用二級緩存,有些時候效率還會更高。
缺點
1.SQL本身是一種結構化查詢語言,加上了一些控制(賦值、循環和異常處理等),但不是OO的,本質上還是過程化的,面對復雜的業務邏輯,過程化的處理會很吃力。這一點算致命傷。
2.不便于調試。基本上沒有較好的調試器,很多時候是用print來調試,但用這種方法調試長達數百行的存儲過程簡直是噩夢。好吧,這一點不算啥,C#/java一樣能寫出噩夢般的代碼。3.沒辦法應用緩存。雖然有全局臨時表之類的方法可以做緩存,但同樣加重了數據庫的負擔。如果緩存并發嚴重,經常要加鎖,那效率實在堪憂。
4.無法適應數據庫的切割(水平或垂直切割)。數據庫切割之后,存儲過程并不清楚數據存儲在哪個數據庫中。
5.精通SQL的新手越來越少——不要笑,這是真的,我面試過N多新人,都不知道如何創建全局臨時表、不知道having、不知道聚集索引和非聚集索引,更別提游標和提交叉表查詢了。好吧,這個缺點算是湊數用的,作為屌絲程序員,我們的口號是:沒有不會的,只有不用的。除了少數有語言潔癖的人,我相信精通SQL只是時間問題。總結
存儲過程最大的優點是部署的方便性——可以在生產環境下直接修改——雖然濫用的后果很嚴重。
存儲過程最大的缺點是SQL語言本身的局限性——我們不應該用存儲過程處理復雜的業務邏輯——讓SQL回歸它“結構化查詢語言”的功用吧。
第三篇:mysql 5.0存儲過程學習總結
mysql 5.0存儲過程學習總結
一.創建存儲過程 1.基本語法:
create procedure sp_name()begin end 2.參數傳遞
二.調用存儲過程
1.基本語法:call sp_name()注意:存儲過程名稱后面必須加括號,哪怕該存儲過程沒有參數傳遞
三.刪除存儲過程 1.基本語法:
drop procedure sp_name// 2.注意事項
(1)不能在一個存儲過程中刪除另一個存儲過程,只能調用另一個存儲過程
四.區塊,條件,循環 1.區塊定義,常用 begin end;也可以給區塊起別名,如: lable:begin end lable;可以用leave lable;跳出區塊,執行區塊以后的代碼
2.條件語句 3.循環語句 :while循環 loop循環 repeat until循環 repeat until循環
五.其他常用命令
1.show procedure status 顯示數據庫中所有存儲的存儲過程基本信息,包括所屬數據庫,存儲過程名稱,創建時間等 2.show create procedure sp_name 顯示某一個存儲過程的詳細信息
mysql存儲過程基本函數
一.字符串類
CHARSET(str)//返回字串字符集 CONCAT(string2 [,...])//連接字串
INSTR(string ,substring)//返回substring首次在string中出現的位置,不存在返回0 LCASE(string2)//轉換成小寫
LEFT(string2 ,length)//從string2中的左邊起取length個字符 LENGTH(string)//string長度
一起推論壇
一起推論壇www.tmdps.cn
第四篇:課題:SQLServer存儲過程返回值總結
SQLServer存儲過程返回值總結
1.存儲過程沒有返回值的情況(即存儲過程語句中沒有return之類的語句)
用方法 int count = ExecuteNonQuery(..)執行存儲過程其返回值只有兩種情況
(1)假如通過查詢分析器執行該存儲過程,在顯示欄中假如有影響的行數,則影響幾行count就是幾
(2)假如通過查詢分析器執行該存儲過程,在顯示欄中假如顯示'命令已成功完成。'則count =-1;在顯示欄中假如有查詢結果,則count =-1
總結:A.ExecuteNonQuery()該方法只返回影響的行數,假如沒有影響行數,則該方法的返回值只能是-1,不會為0。
B.不論ExecuteNonQuery()方法是按照CommandType.StoredProcedure或者CommandType.Text執行,其效果和A一樣。
2.獲得存儲過程的返回值--通過查詢分析器獲得
(1)不帶任何參數的存儲過程(存儲過程語句中含有return)
---創建存儲過程
CREATE PROCEDURE testReturn
AS
return 145
GO
---執行存儲過程
DECLARE @RC int
exec @RC=testReturn
select @RC
---說明
查詢結果為145
(2)帶輸入參數的存儲過程(存儲過程語句中含有return)
---創建存儲過程
create procedure sp_add_table1
@in_name varchar(100), @in_addr varchar(100), @in_tel varchar(100)
as
if(@in_name = '' or @in_name is null)
return 1
else
begin
insert into table1(name,addr,tel)values(@in_name,@in_addr,@in_tel)
return 0
end
---執行存儲過程
<1>執行下列,返回1
declare @count int exec @count = sp_add_table1 '','中三路','123456' select @count
<2>執行下列,返回0
declare @count int exec @count = sp_add_table1 '','中三路','123456' select @count
---說明
查詢結果不是0就是1
(3)帶輸出參數的存儲過程(存儲過程中可以有return可以沒有return)
例子A:
---創建存儲過程
create procedure sp_output
@output int output
as
set @output = 121
return 1
---執行存儲過程
<1>執行下列,返回121
declare @out int
exec sp_output @out output
select @out
<2>執行下列,返回1
declare @out int
declare @count int exec @count = sp_output @out output
select @count
---說明
有return,只要查詢輸出參數,則查詢結果為輸出參數在存儲過程中最后變成的值;只要不查詢輸出參數,則查詢結果為return返回的值
例子B:
---創建存儲過程
create procedure sp_output
@output int output
as
set @output = 121
---執行存儲過程
<1>執行下列,返回121
declare @out int
exec sp_output @out output
select @out
<2>執行下列,返回0
declare @out int
declare @count int
exec @count = sp_output @out output
select @count
---說明
沒有return,只要查詢輸出參數,則查詢結果為輸出參數在存儲過程中最后變成的值;只要不查詢輸出參數,則查詢結果為0
總結:
(1)存儲過程共分為3類:
A.返回記錄集的存儲過程---------------------------其執行結果是一個記錄集,例如:從數據庫中檢索出符合某一個或幾個條件的記錄
B.返回數值的存儲過程(也可以稱為標量存儲過程)-----其執行完以后返回一個值,例如:在數據庫中執行一個有返回值的函數或命令
C.行為存儲過程----用來實現數據庫的某個功能,而沒有返回值,例如:在數據庫中的更新和刪除操作
(2)含有return的存儲過程其返回值為return返回的那個值
(3)沒有return的存儲過程,不論執行結果有無記錄集,其返回值是0
(4)帶輸出參數的存儲過程:假如有return則返回return返回的那個值,假如要select輸出參數,則出現輸出參數的值,于有無return無關
--------------------3.獲得存儲過程的返回值--通過程序獲得
---------------------------SqlParameter[] cmdParms = {..,new SqlParameter(“@return”,SqlDbType.Int)};cmdParms[cmdParms.Length1].Direction = ParameterDirection.Output或者 cmdParms[cmdParms.Length1].Value;
分類: asp.net
第五篇:個人主要優缺點總結
個人主要優缺點總結
缺點讓你弄丟自信,優點讓你找回自信。下面是小編整理的個人主要優缺點總結范文,希望對你有所幫助!
優點:
1、我是一個比較實在的年輕人,對要做的事情很執著。
2、不怕吃苦、不怕累、不怕臟。
3、做每件事情都有計劃,善于做筆記(我非常喜歡“PDCA”、“輕重緩急”)。
4、自己決定好的事情,我片刻不想停留,直至完成。
5、有責任心,勇于擔當。
6、我喜歡和人交往,尊重別人。
7、我是一個很樂觀的年輕人,我喜歡幫助別人,這樣可以讓自己幸福。
8、善于學習身邊人的優點。
9、注重思路,在辦公室里,我要求自己的辦公用品要整齊;在工作安排中,自己負責的事情要條理。
10、遇到問題不等不靠,我會積極的動腦子去解決。
11、喜歡收集和學習管理的知識。
缺點:
1、著急、性子急,做事情急于求成。
2、浮躁,做起事不夠沉穩。
3、喜歡吃喝、抽煙,年輕人喝酒不上進,對自己的身體也不負責任。
4、有時候過于自信,認為自己工作安排的很好,就貪睡。
5、在工作中,自己不主動學習外專業的知識。
6、語言表達能力欠缺。
7、組織和管理能力比較弱。
8、網絡占用了我晚上學習的時間,所以沒能好好利用時間來提高自己。
9、年輕經驗不足,導致做某些工作效率低。
優點:
1、做人真誠,做事認真負責。
2、喜歡與人交往,善于組織策劃活動和項目。
3、積極務實,敢于主動承擔自己的責任。
4、能堅持。確定了正確方向,我就能把所有的力氣砸向那個方向。有執行能力。
5、勤奮,善于學習自己感興趣的知識和事物。做事喜歡列個計劃,分出輕重緩急。
缺點:
1、性格方面的弱點,有時給自己壓力過大,急于求成,過猶不及。
2、在擔任團隊領導的時候,涉及到隊員的利益的時候,有時為隊員考慮的太多,導致做決定的時候會花比較多的時間。
3、不主動鍛煉身體,除了和朋友一起打籃球和其他球類運動。
4、工作起來,有時會忘記時間。昨天晚上就很晚睡,大概24:00過的樣子,一直忙省分行領導給的20xx屆新入行大學生培訓電子雜志的工作。
5、在交朋友的時候,喜歡故事經歷豐富的朋友,不喜歡朋友沒有故事,太平淡。
對未來職業生涯的展望和規劃
我,金融學和信息管理與信息系統雙學位畢業,對金融有很濃厚的興趣。我有一個人生目標:做最有影響力的自己。它不是靠嘩眾取寵能夠得來的,而是需要不斷提升夢想的高度、拓展心靈的寬度、累積思想的厚度!我相信,我的人生目標在以后的路上會一直影響我的職業生涯。
有了夢想還要有明確的規劃,更要有實際的行動。要記住仰望星空,更要在仰望星空的同時看看腳下,從本職做起、從小事做起、從細節做起,不斷努力跳躍并嘗試觸摸自己的夢想。我知道,我們每個人都會分到下邊分理處做柜臺,我贊同這種安排,我明白,銀行中幾乎所有的產品都是會通過柜臺面向我們的客戶,假如沒有柜員的鍛煉,我相信,把我們分到其他業務崗位,我們很難上手,因為我們少了在柜員崗的鍛煉,不熟悉業務和產品。相反,在我們經歷了柜員崗的鍛煉后,再把我們分到其他崗位上,我相信,那時我們會更加的有自信,也能更好的完成工作。所以,我會珍惜在柜員崗的機會,鉚勁提升自身的業務能力,熟練掌握我們的產品。力爭做個業務骨干!這是我在柜員崗對自己一個總體要求!
在柜員崗夯實了業務和產品的基礎后,我目前的想法是進公司業務部和銷售部門(理財和銷貸)工作。公司業務部很累,壓力很大,很有挑戰,我清楚!但我相信自己的做事態度和能力,一定能夠勝任!我喜歡與人交往,做人真誠,也很想去銷售的部門工作,像理財和銷貸部門。這是目前根據我的興趣,結合自身的優點給自己的未來一段時間的規劃。在以后的實際工作中,我會更理性的調整自己,進一步全面發掘自己,找到最適合我的方向,然后努力地朝這個方向、目標前進。在前進的過程中,不斷累積自己的知識,提升自己的能力,一如既往的堅持積極務實的工作態度,努力我完善自己的情商。我相信,當有一天,夢想的高度、心靈的寬度,思想的厚度這三圍都豐滿了的時候,就會成就我的人生目標--做“最有影響力的自己”!
1、做人真誠,做事認真負責。
2、能堅持。確定了正確方向,我就能把所有的力氣砸向那個方向。有執行能力。
3、勤奮,善于學習自己感興趣的知識和事物。做事喜歡列個計劃,分出輕重緩急。
4、喜歡與人交往,善于組織策劃活動和項目。
5、積極務實,敢于主動承擔自己的責任。(勵志天下)
個人優缺點總結:缺點
1、不主動鍛煉身體,除了和朋友一起打籃球和其他球類運動。
2、工作起來,有時會忘記時間。昨天晚上就很晚睡,大概24:00過的樣子,一直忙省分行領導給新入行大學生培訓電子雜志的工作。
3、在交朋友的時候,喜歡故事經歷豐富的朋友,不喜歡朋友沒有故事,太平淡。
4、性格方面的弱點,有時給自己壓力過大,急于求成,過猶不及。
5、在擔任團隊領導的時候,涉及到隊員的利益的時候,有時為隊員考慮的太多,導致做決定的時候會花比較多的時間。