我在使用SQL Server中的行號進行動態分類時遇到了問題。我有它的工作,但它在非數字字段拋出錯誤。我需要改變以獲得與Alpha工作排序?行號在文本列上排序
ID Description
5 Test
6 Desert
3 A evil
Ive得到了一個SQL Prodcedure
CREATE PROCEDURE [CRUDS].[MyTable_Search]
-- Add the parameters for the stored procedure here
-- Full Parameter List
@ID int = NULL,
@Description nvarchar(256) = NULL,
@StartIndex int = 0,
@Count int = null,
@Order varchar(128) = 'ID asc'
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
Select * from
(
Select ROW_NUMBER() OVER
(Order By
case
when @Order = 'ID asc' then [TableName].ID
when @Order = 'Description asc' then [TableName].Description
end asc,
case
when @Order = 'ID desc' then [TableName].ID
when @Order = 'Description desc' then [TableName].Description
end desc
) as row,
[TableName].* from [TableName]
where
(@ID IS NULL OR [TableName].ID = @ID) AND
(@Description IS NULL OR [TableName].Description = @Description)
) as a
where
row > @StartIndex
and (@Count is null or row <= @StartIndex + @Count)
order by
case
when @Order = 'ID asc' then a.ID
when @Order = 'Description asc' then a.Description
end asc,
case
when @Order = 'ID desc' then a.ID
when @Order = 'Description desc' then a.Description
end desc
END
邊注:添加'@count是null'條件到謂詞會減慢你的查詢很多。您應該將該行更改爲'或行<= ISNULL(@StartIndex + @Count,2147483647)'。它看起來很愚蠢,但如果桌子很大,那麼它會產生很大的差異。對於那些其他'@param IS NULL'謂詞也是如此,它們確實會扼殺查詢性能。 – Aaronaught 2010-04-07 15:09:08
你解決了這個問題嗎? – 2010-04-09 11:26:39
我想你不需要額外的ORDER BY,如果你的SELECT已經有了。 – 2010-04-09 11:34:42