国产成人精品999视频&日本一区二区亚洲人妻精品&久久久精品国产99久久精&99热这里只有成人精品国产&精品国产剧情av一区二区&成人亚洲精品久久久久app&国产精品美女高潮抽搐A片

Categories


Tags


SQL Server存儲(chǔ)過(guò)程編程經(jīng)驗(yàn)技巧

MS SQL Server目前正日益成為WindowNT操作系統(tǒng)上面最為重要的一種數(shù)據(jù)庫(kù)管理系統(tǒng),隨著MS SQL Server2000的推出,微軟的這種數(shù)據(jù)庫(kù)服務(wù)系統(tǒng)真正的實(shí)現(xiàn)了在WindowsNT/2000系列操作系統(tǒng)一統(tǒng)天下的局面,在微軟的操作系統(tǒng)上面,沒(méi)有任何一種數(shù)據(jù)庫(kù)系統(tǒng)能與之相抗衡,包括數(shù)據(jù)庫(kù)領(lǐng)域的領(lǐng)頭羊甲骨文公司的看家數(shù)據(jù)庫(kù)系統(tǒng)Oracle在內(nèi)。不可否認(rèn),MS SQL Server最大的缺陷就是只能運(yùn)行在微軟自己的操作系統(tǒng)上面,這一點(diǎn)是MS SQL Server的致命傷口。但在另一方面卻也成了最好的促進(jìn)劑,促使MS SQL Server在自己僅有的“土地”上面將自己的功能發(fā)揮到了極至,最大限度的利用了WindowsNT系列操作系統(tǒng)的各種潛能!作為MS SQL Server數(shù)據(jù)庫(kù)系統(tǒng)中很重要的一個(gè)概念就是存儲(chǔ)過(guò)程,合理的使用存儲(chǔ)過(guò)程,可以有效的提高程序的性能;并且將商業(yè)邏輯封裝在數(shù)據(jù)庫(kù)系統(tǒng)中的存儲(chǔ)過(guò)程中,可以大大提高整個(gè)軟件系統(tǒng)的可維護(hù)性,當(dāng)你的商業(yè)邏輯發(fā)生了改變的時(shí)候,不再需要修改并編譯客戶端應(yīng)用程序以及重新分發(fā)他們到為數(shù)眾多的用戶手中,你只需要修改位于服務(wù)器端的實(shí)現(xiàn)相應(yīng)商業(yè)邏輯的存儲(chǔ)過(guò)程即可。合理的編寫自己需要的存儲(chǔ)過(guò)程,可以最大限度的利用MS SQL Server的各種資源。下面我們來(lái)共同看看各種編寫MS SQL Server存儲(chǔ)過(guò)程和使用存儲(chǔ)過(guò)程的技巧經(jīng)驗(yàn)!

下面我們討論的前提都是您有過(guò)一定的MS SQL Server存儲(chǔ)過(guò)程的編寫經(jīng)驗(yàn),下面的各種技巧如果沒(méi)有特別注明,則同時(shí)適用于MS SQL Server7.0和MS SQL Server2000。

1、使用OUTPUT類型參數(shù)的存儲(chǔ)過(guò)程的技巧

一般的存儲(chǔ)過(guò)程都是直接返回一段記錄集給調(diào)用者,但是有的時(shí)候我們只需要一些存儲(chǔ)過(guò)程返回的一些參數(shù)的值,這時(shí)候可以指定存儲(chǔ)過(guò)程的OUTPUT參數(shù),比如:

Create procedure GetName

@uid nvarchar(1),

@usernam nvarchar(10)='' output

AS

set?。纔sername='hongchao'

GO

在上面的存儲(chǔ)過(guò)程當(dāng)中我們傳遞進(jìn)的參數(shù)是@uid,而參數(shù)@username則在調(diào)有的時(shí)候不需要傳遞進(jìn)去。這樣,存儲(chǔ)過(guò)程會(huì)返回給我們參數(shù)@username的值是‘hongchao’。上面的都比較的容易,需要注意的是,當(dāng)在SQL2000中的時(shí)候,如果你的存儲(chǔ)過(guò)程只有一個(gè)參數(shù),并且這個(gè)參數(shù)是OUTPUT類型的,你必須在調(diào)用這個(gè)存儲(chǔ)過(guò)程的時(shí)候給這個(gè)參數(shù)一個(gè)初始的值,否則會(huì)出現(xiàn)調(diào)用錯(cuò)誤的情況!

2、在存儲(chǔ)過(guò)程中的書寫注意事項(xiàng)

這一點(diǎn)在MS SQL Server7.0和MS SQL Server2000種有些地方是不一樣的,也不知道是不是微軟的遺漏,那就是有些系統(tǒng)的關(guān)鍵字在不同的版本之間有所不同,比如關(guān)鍵字level,同樣的一句話:

select * from users where level=1

在MS SQL Server7當(dāng)中的存儲(chǔ)過(guò)程當(dāng)中運(yùn)行沒(méi)有絲毫的問(wèn)題,但是到了MS SQL Server2000當(dāng)中則會(huì)出現(xiàn)運(yùn)行的錯(cuò)誤,原因就是在于在MS SQL Server2000中“l(fā)evel”被當(dāng)作了關(guān)鍵字(奇怪的是SQL7當(dāng)中也同樣是關(guān)鍵字,卻沒(méi)問(wèn)題),所以在SQL2000當(dāng)中,上面的語(yǔ)句應(yīng)當(dāng)改為:

select?。rom users where [level]=1

從上面的例子中我們可以看到,在你編寫存儲(chǔ)過(guò)程的時(shí)候,最好在有可能和系統(tǒng)關(guān)鍵字的地方使用“[”和“]”將他包圍起來(lái),以避免在移植過(guò)程中出現(xiàn)的運(yùn)行錯(cuò)誤問(wèn)題。

3、在存儲(chǔ)過(guò)程中使用系統(tǒng)存儲(chǔ)過(guò)程SP_Executesql的注意事項(xiàng)

我們?cè)诰帉懽约旱拇鎯?chǔ)過(guò)程的時(shí)候,往往在很多的情況下,會(huì)使用到系統(tǒng)的存儲(chǔ)過(guò)程SP_Execute。但是需要的注意的是,如果你在這個(gè)存儲(chǔ)過(guò)程的參數(shù)(一般是一段SQL語(yǔ)句)當(dāng)中進(jìn)行了臨時(shí)Table的操作,那末對(duì)于調(diào)用者來(lái)說(shuō),這個(gè)臨時(shí)Table是不可見的,也就是說(shuō)你無(wú)法通過(guò)臨時(shí)Table來(lái)在調(diào)用者和被調(diào)用者之間傳遞值。解決的方法是使用全局臨時(shí)Table,也就是“#?!遍_頭的Table。

4、在存儲(chǔ)過(guò)程中使用臨時(shí)Table和游標(biāo)的注意事項(xiàng)

如果我們的商業(yè)邏輯比較復(fù)雜,在存儲(chǔ)過(guò)程當(dāng)中,就需要一些媒介作為中轉(zhuǎn)臺(tái),這時(shí)候臨時(shí)表舅發(fā)揮了作用,但是請(qǐng)務(wù)必記得在使用完之后,即使刪除使用到的臨時(shí)Table。

而在存儲(chǔ)過(guò)程當(dāng)中想要依次遍歷一個(gè)記錄集的唯一方法就是使用系統(tǒng)游標(biāo),同樣要注意的是,在使用完成之后及時(shí)關(guān)閉和銷毀游標(biāo)對(duì)象釋放他用到的資源。并且不在萬(wàn)不得已的情況下,不要隨意使用游標(biāo),因?yàn)樗麜?huì)占用較多的系統(tǒng)資源,尤其是對(duì)于大并發(fā)量的情況下,很容易使得系統(tǒng)資源耗盡而崩潰。

使用臨時(shí)Table和游標(biāo)各有利弊,在使用的過(guò)程中要適當(dāng)?shù)睦眉纯桑?/p>

5、在存儲(chǔ)過(guò)程中調(diào)用外部的ActiveX DLL程序

有些特殊的情況下,我們可能會(huì)需要調(diào)用外部的ActiveX DLL程序,這個(gè)時(shí)候就需要使用到系統(tǒng)的存儲(chǔ)過(guò)程sp_OACreate以及其他的相關(guān)系統(tǒng)存儲(chǔ)過(guò)程,都是以sp_OA開頭的存儲(chǔ)過(guò)程,可以自由的在自己的存儲(chǔ)過(guò)程當(dāng)中調(diào)用ActiveX DLL的各種方法和屬性。比如下面的例子:

DECLARE?。纎bject int

DECLARE @hr int

DECLARE?。纏roperty varchar(255)

DECLARE @return varchar(255)

DECLARE?。纒rc varchar(255),?。纃esc varchar(255)

-- 建立一個(gè)對(duì)象(SQLDMO.SQLServer).

EXEC?。纇r = sp_OACreate?。QLDMO.SQLServer',?。纎bject OUT

IF?。纇r?。迹尽?

BEGIN

EXEC sp_OAGetErrorInfo?。纎bject,?。纒rc OUT, @desc OUT

SELECT hr=convert(varbinary(4),@hr), Source=@src, Description=@desc

RETURN

END

-- 設(shè)置對(duì)象的屬性.

EXEC?。纇r?。健p_OASetProperty @object,?。ostName',?。izmo'

IF?。纇r?。迹尽?

BEGIN

EXEC sp_OAGetErrorInfo?。纎bject, @src OUT, @desc OUT

SELECT hr=convert(varbinary(4),@hr), Source=@src, Description=@desc

RETURN

END

-- 通過(guò)OUTPUT參數(shù)獲取對(duì)象的屬性值.

EXEC @hr?。健p_OAGetProperty @object, 'HostName', @property OUT

IF?。纇r <> 0

BEGIN

EXEC sp_OAGetErrorInfo?。纎bject, @src OUT,?。纃esc OUT

SELECT hr=convert(varbinary(4),@hr), Source=@src, Description=@desc

RETURN

END

PRINT @property

-- 調(diào)用對(duì)象的方法

EXEC?。纇r?。健p_OAMethod?。纎bject,?。onnect', NULL,?。y_server',?。y_login', 'my_password'

IF?。纇r?。迹尽?

BEGIN

EXEC sp_OAGetErrorInfo?。纎bject, @src OUT,?。纃esc OUT

SELECT hr=convert(varbinary(4),@hr), Source=@src, Description=@desc

RETURN

END

-- 銷毀已經(jīng)創(chuàng)建的ActiveX對(duì)象

EXEC?。纇r = sp_OADestroy?。纎bject

IF @hr?。迹尽?

BEGIN

EXEC sp_OAGetErrorInfo?。纎bject,?。纒rc OUT,?。纃esc OUT

SELECT hr=convert(varbinary(4),@hr), Source=@src, Description=@desc

RETURN

END

6、在存儲(chǔ)過(guò)程中使用數(shù)據(jù)庫(kù)事務(wù)處理

在很多的情況下,我們?cè)诖鎯?chǔ)過(guò)程中都會(huì)遇到需要同時(shí)操作多個(gè)表的情況,這時(shí)候就需要避免在操作的過(guò)程中由于以外而造成的數(shù)據(jù)的不一致性。這時(shí)候就需要將操作多個(gè)表的操作放入到事務(wù)中進(jìn)行處理。

但是需要注意的是,不能在事務(wù)中使用return語(yǔ)句強(qiáng)行退出,這樣會(huì)引發(fā)事務(wù)的非正常錯(cuò)誤,不能保證數(shù)據(jù)的一致性。

并且,一旦將多個(gè)處理放入事務(wù)當(dāng)中,系統(tǒng)的處理速度會(huì)有所降低,所以應(yīng)當(dāng)將頻繁操作的多個(gè)可分割的處理過(guò)程放入到多個(gè)存儲(chǔ)過(guò)程當(dāng)中,這樣會(huì)大大提高系統(tǒng)的響應(yīng)速度,但是前提是不違背數(shù)據(jù)的一致性。

看完了上面的這些編寫SQL Server存儲(chǔ)過(guò)程當(dāng)中的技巧,相信對(duì)您或多或少會(huì)有些幫助,也希望通過(guò)上面的一些經(jīng)驗(yàn)總結(jié),可以使得您在應(yīng)用SQL Server存儲(chǔ)過(guò)程的時(shí)候,有意識(shí)的可以避免一些彎路。

(以上所有程序在Windows Advance Server2000中文版+MS SQL Server7.0/2000中文版測(cè)試通過(guò))

作者:蘇紅超

來(lái)源:月光博客


Public @ 2009-05-21 15:47:50

畸形文件、文件夾刪除方法(適用windows系統(tǒng)云服務(wù)器)

云服務(wù)器主機(jī)中如果發(fā)現(xiàn)如下圖類型的畸形文件,可以直接下載畸形文件掃描工具進(jìn)行掃描刪除即可。畸形文件掃描工具下載注意:windows2012系統(tǒng)會(huì)清理執(zhí)行目錄里面的文件,請(qǐng)到D盤內(nèi)單獨(dú)新建一個(gè)空目錄,例如示例是在D盤里面新建了一個(gè)1目錄,將腳本存放在D:\1 內(nèi)。打開命令行,進(jìn)入目錄執(zhí)行。例如下面示例:blob.pngwindows2003和windows2008系統(tǒng):打開 開始-運(yùn)行-輸入cmd,

Public @ 2017-05-10 16:00:51

多IP應(yīng)用云主機(jī)切換出口IP地址[Linux系統(tǒng)教程]

在Linux系統(tǒng)中,可以通過(guò)配置網(wǎng)絡(luò)接口文件或者使用工具來(lái)實(shí)現(xiàn)多IP應(yīng)用云主機(jī)切換出口IP地址。以下是兩種常見的方法: 1. 配置網(wǎng)絡(luò)接口文件: 1. 打開終端并使用root權(quán)限登錄服務(wù)器。 2. 編輯網(wǎng)絡(luò)接口文件,例如eth0,可以使用vi或者nano等編輯器打開該文件。 ``` vi /etc/network/interfaces ```

Public @ 2023-07-25 11:50:37

SQL Server的Inner Join及Outer Join

--- **Inner Join:** 內(nèi)連接(Inner Join)是通過(guò)比較表中字段之間的關(guān)系,把兩個(gè)或多個(gè)表中符合指定關(guān)系的數(shù)據(jù)行連接起來(lái),查詢結(jié)果只有當(dāng)兩個(gè)表中同時(shí)存在滿足指定關(guān)系的數(shù)據(jù)記錄時(shí),才會(huì)被檢索出來(lái)。它主要是利用“=”操作符的結(jié)果作為連接的依據(jù)。內(nèi)連接可以是一對(duì)一(One-to-One)或一對(duì)多(One-to-Many)關(guān)系,它們可以分別稱為單值內(nèi)連接(Scal

Public @ 2023-03-03 14:48:23

SQL Server 2005附加數(shù)據(jù)庫(kù)錯(cuò)誤5120解決辦法

1.附加數(shù)據(jù)庫(kù)提示錯(cuò)誤5120圖片117.png2.打開“SQL Server Configuration Manager”配置界面圖片118.png3.選擇SqlServer(SQLSERVER),選項(xiàng),并右擊圖片119.png4.選擇“Local System圖片120.png配置成功圖片121.png來(lái)源:景安

Public @ 2018-01-22 15:47:48

更多您感興趣的搜索

0.534602s