1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 多表联合查询存储过程

多表联合查询存储过程

时间:2024-06-28 11:03:55

相关推荐

多表联合查询存储过程

多表联合查询存储过程,@doCount为1时返回查询总数。

------------------------------------

--支持任意排序的分页存储过程

--魏金梁

------------------------------------

CREATE PROCEDURE search_sp_wei

@tblName varchar(255), -- 表名支持多表,用逗号隔开,如果为多表@strWhere不能为空。必须有多表之间的连接。

@strGetFields varchar(1000) = '*', -- 需要返回的列

@fldName varchar(255)='', -- 排序的字段名

@fldName1 varchar(255)='', -- 临时表中的排序的字段名,多表时与前面的@fldName对应只是更换表名为tblTmp。单表之写字段即可。

@PageSize int = 10, -- 页尺寸

@PageIndex int = '', -- 页码

@doCount bit = 0, -- 返回记录总数, 非 0 值则返回

@OrderType bit = '', -- 设置排序类型, 非 0 值则降序

@strWhere varchar(1500) = '' -- 查询条件 (注意: 不要加 where)

AS

declare @strSQL nvarchar(4000) -- 主语句

declare @strTmp varchar(110) -- 临时变量

declare @strOrder varchar(400) -- 排序类型

if @doCount != 0

begin

if @strWhere !=''

set @strSQL = 'select count(1) as Total from ' + @tblName + ' where '+@strWhere

else

set @strSQL = 'select count(1) as Total from ' + @tblName + ''

end

--以上代码的意思是如果@doCount传递过来的不是0,就执行总数统计。以下的所有代码都是@doCount为0的情况

else

begin

if @OrderType != 0

begin

set @strTmp = '< (select min'

set @strOrder = ' order by ' + @fldName +' desc'

--如果@OrderType不是0,就执行降序,这句很重要!

end

else

begin

set @strTmp = '> (select max'

set @strOrder = ' order by ' + @fldName +' asc'

end

if @PageIndex = 1

begin

if @strWhere != ''

set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from ' + @tblName + ' where ' + @strWhere + ' ' + @strOrder

else

set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from ' + @tblName + ' '+ @strOrder

--如果是第一页就执行以上代码,这样会加快执行速度

end

else

begin

--以下代码赋予了@strSQL以真正执行的SQL代码

set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from ' + @tblName + ' where ' + @fldName + '' + @strTmp +'('+ @fldName1 + ') from (select top ' + str((@PageIndex-1)*@PageSize) + ' '+ @fldName + ' from ' + @tblName + '' + @strOrder + ') as tblTmp)'+ @strOrder

if @strWhere != ''

set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from ' + @tblName + ' where ' + @fldName + '' + @strTmp +'('

+ @fldName1 + ') from (select top ' + str((@PageIndex-1)*@PageSize) + ' '

+ @fldName + ' from ' + @tblName + ' where ' + @strWhere + ' '

+ @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder

end

end

exec SP_EXECUTESQL @strSQL

GO

SET QUOTED_IDENTIFIER OFF

GO

SET ANSI_NULLS ON

GO

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。