你可以嘗試使用動態SQL表達式是這樣的:
declare
@table_primary_key varchar(max) = 'ProjectID',
@table_name varchar(max) = 'ProjectList',
@start_row int = 10,
@limit_row int = 20,
@column_name varchar(max) = 'ProjectStatus',
@column_value varchar(max) = '5',
@sort_by varchar(max) = 'ProjectName',
@order varchar(4) = 'ASC' -- 'DESC'
declare
@sql varchar(max) = ''
set @sql = 'SELECT * FROM ('
+ 'SELECT ' + @table_primary_key + ', ROW_NUMBER() OVER (ORDER BY ' + @sort_by + ' ' + @order + ') as row FROM ' + @table_name + ' WHERE ' + @column_name + ' = ''' + @column_value + ''') a'
+ ' WHERE row > ' + cast(@start_row as varchar) + ' and row <= ' + cast(@limit_row as varchar)
exec (@sql)
或者您可以使用存儲過程
create procedure dbo.GetResults
(
@table_primary_key varchar(max),
@table_name varchar(max),
@start_row int,
@limit_row int,
@column_name varchar(max),
@column_value varchar(max),
@sort_by varchar(max),
@order varchar(4)
)
as
begin
declare
@sql varchar(max) = ''
set @sql = 'SELECT * FROM ('
+ 'SELECT ' + @table_primary_key + ', ROW_NUMBER() OVER (ORDER BY ' + @sort_by + ' ' + @order + ') as row FROM ' + @table_name + ' WHERE ' + @column_name + ' = ''' + @column_value + ''') a'
+ ' WHERE row > ' + cast(@start_row as varchar) + ' and row <= ' + cast(@limit_row as varchar)
exec (@sql)
end
,然後... ...
exec GetResults 'ProjectID', 'ProjectList', 10, 20, 'ProjectStatus', '5', 'ProjectName', 'ASC'
看看動態SQL和EXEC – Shnugo
背後的邏輯是什麼?請張貼一些數據和預期結果。 –
@Shnugo謝謝,我會研究它 – stacheldraht27