根据指定字段排序编号(SQL Server 2005,Update,Order By)

在SQL Server 2005可以通过with as根据指定的字段排序编号,SQL语句如下:  

WITH 表1 AS
(
SELECT 编号字段名, ROW_NUMBER() OVER(ORDER BY 排序字段名 DESCAS RowNum 
FROM
 表名
)
Update
 表1

SET 编号字段名=RowNum

 

应用场景:

在博客园社区中通过这样的SQL语句根据小组人气值对小组进行排名:

WITH groups AS
(
SELECT RankNum, ROW_NUMBER() OVER(ORDER BY 人气值 DESCAS RowNum 
FROM
 club_Groups
)
Update
 groups   
SET RankNum=RowNum

 

如果只是一个排序字段,性能应该不是很大; 如果很多字段,性能会有影响.
向 这样的语句, 就要慎重考虑性能.

SELECT TOP 200
T1.TRADER_ID,
T3.APPROVAL_LTR_ST,
ROW_NUMBER() OVER(ORDER BY
CASE
WHEN @p_sort_expression = 'TRADER_REG_NO DESC' THEN
T1.TRADER_REG_NO END DESC,
CASE
WHEN @p_sort_expression = 'TRADER_NAME DESC' THEN
T1.TRADER_NAME END DESC,
CASE
WHEN @p_sort_expression = 'APPROVAL_LTR_ST DESC' THEN
T3.APPROVAL_LTR_ST END DESC,
) ROW_INDEX
FROM T_BC_ARS_TRADER T1,T_BC_ARS_REGISTRATION T2,T_BC_ARS_AGENT_LICENSE T3
WHERE (T1.TRADER_ID=T2.TRADER_ID)
AND (T1.TRADER_ST='A')
AND (CHARINDEX(@p_trader_reg_no,T1.TRADER_REG_NO)=1 OR @p_trader_reg_no IS NULL)
AND (CHARINDEX(@p_ref_no,T2.REF_NO)=1 OR @p_ref_no IS NULL)
AND (T2.REG_ID=T3.REG_ID)

我也是一个非常大项目性能测试的时候发现的.

posted @ 2009-05-24 20:07  冰封的心  阅读(397)  评论(0)    收藏  举报