
set ansi_nulls on
set quoted_identifier on
go
-- [selectbase] 1,1,'users','username=''test'''
alter procedure [dbo].[selectbase]
@pageindex int,
@pagesize int,
@tablename nvarchar(max),
@where nvarchar(max)=''
as
declare @rowcount int
declare @intstart int
declare @intend int
declare @sql nvarchar(max), @wherer nvarchar(max), @orderby nvarchar(max)
set @rowcount=0
set nocount on
if @where<>''
begin
set @where=' and '+@where
end
if charindex('order by', @where)>0
set @wherer=substring(@where, 1, charindex('order by',@where)-1) --取得條件
set @orderby=substring(@where, charindex('order by',@where), len(@where)) --取得排序方式(order by 字段 方式)
else
set @wherer=@where
declare @pkname nvarchar(50)
if(len(@tablename)>50)
begin
set @pkname='id'
end
else
select top 1 @pkname=[name] from syscolumns where id=object_id(@tablename) order by colstat desc
set @orderby=' order by '+@pkname+' asc'
set @sql='select @rowcount=count(*) from '+cast(@tablename as nvarchar(3000))+' where 1=1 '+@wherer
exec sp_executesql @sql,n'@rowcount int output',@rowcount output
if @pageindex=0 and @pagesize=0 --不進行分頁,查詢所有資料清單
set @sql='select * from '+cast(@tablename as nvarchar(3000))+' where 1=1 '+@where
else --進行分頁查詢資料清單
set @intstart=(@pageindex-1)*@pagesize+1;
set @intend=@intstart+@pagesize-1
set @sql='select * from(select *,row_number() over('+cast(@orderby as nvarchar)+') as row from '
set @sql=@sql+@tablename+' where 1=1 '+@wherer+') as a where row between '+cast(@intstart as varchar)+' and '+cast(@intend as varchar)
--print @sql
exec sp_executesql @sql
--select @rowcount
return @rowcount
--------------------------------------------
--exec [selectbase] 1,8,'spacecontent','userinfoid=45'
set nocount off
