国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > SQL Server > 正文

SQL SERVER的ROWCOUNT關(guān)鍵字

2024-08-31 00:51:28
字體:
供稿:網(wǎng)友

因?yàn)檠鐾鸒racle,所以一直都以為SQL SERVER很笨。

據(jù)傳SQL 2005有了RowID的東西,可以解決TOP排序的問題。可惜還沒有機(jī)會(huì)體驗(yàn)。在SQL 2000中寫存儲(chǔ)過程,總會(huì)遇到需要TOP的地方,而一旦遇到TOP,因?yàn)闆]辦法把TOP后面的數(shù)字作為變量寫到預(yù)編譯的語句中去,所以只能夠使用構(gòu)造SQL,使用Exec來執(zhí)行。不說效率的問題,心里也總覺得這個(gè)辦法很笨。

實(shí)際上,在SQL 2000中完全可以使用ROWCOUNT關(guān)鍵字解決這個(gè)問題。

ROWCOUNT關(guān)鍵字的用法在聯(lián)機(jī)幫助中有比較詳細(xì)的說明,這兒就不羅嗦了。談?wù)勼w會(huì)。

1、使用ROWCOUNT查詢前幾行結(jié)果。

DECLARE @n INT
SET @n = 1000
SET ROWCOUNT @n
SELECT * FROM Table_1
 


 這樣,查詢結(jié)果將等同于

SELECT TOP 100 FROM Table_1

2、同樣的道理,使用INSERT INTO..SELECT的時(shí)候也有效。

DECLARE @n INT
SET @n = 1000
SET ROWCOUNT @n
INSERT INTO Table_2 (colname1)
SELECT colname1=colname2 FROM Table_1

執(zhí)行的結(jié)果將等同于

INSERT INTO Table_2(colname1)
SELECT TOP 1000 colname1 = colname2 FROM Table_1


3、執(zhí)行UPDATE和DELETE。

因?yàn)閁PDATE和DELETE無法直接使用ORDER BY語法,如果使用ROWCOUNT,將按照主鍵順序從前往后操作。

DECLARE @n INT
SET @n = 1000
SET ROWCOUNT @n
DELETE FROM Table_1


不過也有解決辦法,只要能夠使用ORDER BY關(guān)鍵字就可以了,比如說直接用含ORDER BY的子句,或者先使用ORDER BY語法把需要操作的標(biāo)識(shí)列存為一個(gè)臨時(shí)表或表變量,然后再操作語句中使用IN或EXISTS關(guān)鍵字。

DECLARE @n INT
SET @n = 1000
SET ROWCOUNT @n
DECLARE @t TABLE(ID INT)
INSERT INTO @t
SELECT ID FROM Table_1 ORDER BY colname [ASC/DESC]

DELETE FROM  Table_1 WHERE ID IN (SELECT ID FROM @t)


4、對(duì)于ROWCOUNT的設(shè)置是與session有關(guān)的。如果占用了一個(gè)Session,那么對(duì)應(yīng)的這個(gè)數(shù)據(jù)庫Session將使用最近一次設(shè)置的ROWCOUNT,直到Session結(jié)束或者修改了ROWCOUNT。

5、在用戶自定義函數(shù)中不能使用ROWCOUNT。

6、取消ROWCOUNT。

我不知道為什么在聯(lián)機(jī)幫助中說,寫存儲(chǔ)過程的時(shí)候應(yīng)該注意盡量避免使用ROWCOUNT,而建議使用TOP。難道MS不知道TOP關(guān)鍵后面的數(shù)字不能為變量嗎?也許MS是出于擔(dān)心開發(fā)者忘記了取消ROWCOUNT而影響正常的實(shí)現(xiàn)。

使用這樣的語句即可取消ROWCOUNT了。

SET ROWCOUNT 0


8、總結(jié)

使用ROWCOUNT之后可以很方便的解決TOP關(guān)鍵字不能帶變量的問題,這樣,對(duì)于需要排序取值的問題就比較容易解決了。避免了使用EXEC來執(zhí)行構(gòu)造SQL語句,調(diào)試存儲(chǔ)過程的時(shí)候也要方便很多。唯一不方便的是,沒有找到獲取當(dāng)前ROWCOUNT值的辦法,但仔細(xì)想來,得到這個(gè)值的用處也并不大。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 临夏市| 南康市| 岱山县| 曲阳县| 神池县| 丰县| 元朗区| 华容县| 德令哈市| 抚顺市| 类乌齐县| 天长市| 阳城县| 封丘县| 宁都县| 东宁县| 西昌市| 怀远县| 岳阳县| 永德县| 安化县| 汝州市| 邳州市| 凭祥市| 台前县| 富裕县| 新巴尔虎右旗| 安庆市| 郴州市| 清镇市| 工布江达县| 邓州市| 将乐县| 呼伦贝尔市| 祁门县| 南漳县| 合肥市| 潮州市| 巧家县| 新民市| 平舆县|