/*
Descript:單頁資料存放區過程
Author:XQF222
Date:10:38 2007-7-31
*/
CREATE PROCEDURE SP_SinglePageData(
@TableName nvarchar(200), ----要顯示的表或多個表的串連
@SelectFields nvarchar(200) = '*', ----要顯示的欄位列表
@PrimaryFiled nvarchar(50), ----主表的主鍵
@SortField nvarchar(100) = null, ----排序欄位列表或條件
@SortOrder bit = 0, ----排序方法,0為升序,1為降序
@SelectCondition nvarchar(200) = null, ----不帶where字串的查詢條件
@TotalCounts int output ----返回查詢到的記錄總數
)
AS
Declare @sqlTmp nvarchar(1000) ----存放動態產生的SQL語句
Declare @strTmp nvarchar(1000) ----存放取得查詢結果總數的查詢語句
Declare @sqlSort nvarchar(200) ----存放臨時產生的排序條件
--產生查詢語句--------
--此處@strTmp為取得查詢結果數量的語句
if @SelectCondition is null --沒有設定顯示條件
begin
set @sqlTmp = 'select ' + @SelectFields + ' From ' + @TableName
set @strTmp = 'select @TotalCounts=Count(' + @PrimaryFiled + ') FROM '+@TableName
end
else
begin
set @sqlTmp = 'select ' + @SelectFields + ' From ' + @TableName + ' where ' +
@SelectCondition
set @strTmp = 'select @TotalCounts=Count(' + @PrimaryFiled + ') FROM '+@TableName + '
where ' + @SelectCondition
end
--取得查詢結果總數量-----
exec sp_executesql @strTmp,N'@TotalCounts int out ',@TotalCounts out
--print @TotalCounts
--產生排序字串
if @SortOrder=0 --升序
begin
if not(@SortField is null)
set @sqlSort = ' Order by ' + @SortField
else
set @sqlSort = ' Order by ' + @PrimaryFiled
end
else --降序
begin
if not(@SortField is null)
set @sqlSort = ' Order by ' + @SortField + ' DESC'
else
set @sqlSort = ' Order by ' + @PrimaryFiled + ' DESC '
end
--產生最終查詢字串
if @sqlSort is null
set @sqlTmp = @sqlTmp
else
set @sqlTmp = @sqlTmp + @sqlSort
--print @sqlTmp
exec sp_executesql @sqlTmp
GO