又来提问了。还是上次的存储过程问题。现在是排序问题

ChinaXtHuLang 2011-10-31 11:11:47
存储过程:
CREATE PROCEDURE [dbo].[sp_Page]
@iPage int=1, --当前页码
@iPageSize int=10,--每页条数
@StrTable varchar(200),--查询的表
@StrText varchar(3000),--查询的字段
@StrWhere varchar(2000),--条件
@StrIndex varchar(30),--索引
@StrOrder varchar(300)='',--排序字段
@StrTotals int output --返回总条数
AS
--定义变量
declare @SqlCount nvarchar(2000)
declare @Sql nvarchar(4000)
declare @TempOrder nvarchar(1000)

if @StrOrder<>''
begin
set @TempOrder=' order by '+@StrOrder
end
else
begin
set @TempOrder=''
end

--组合sql语句
if @iPage=1
begin
set @Sql='select top '+str(@iPageSize)+' '+@StrText+' from '+@StrTable+' where 1=1 '+@StrWhere+@TempOrder
end
else
begin
set @Sql='select top '+str(@iPageSize)+' '+@StrText+' from '+@StrTable+' where '+@StrIndex+' not in (select top '+str(@iPageSize*(@iPage-1))+' '+@StrIndex+' from '+@StrTable+' where 1=1 '+@StrWhere+@TempOrder+') '+@StrWhere+@TempOrder
end

set @SqlCount='select @StrTotals=isnull(count(*),10000) from '+@StrTable+' where 1=1 '+@StrWhere

--查询总记录数量
exec sp_executesql @SqlCount,N'@StrTotals int output',@StrTotals output

--执行sql语句返回
--print (@Sql)
exec (@Sql)
GO


调用:
exec sp_Page @iPage =2,@iPageSize=40,@StrTable='Home_ChuShou',@StrText='

id,oTitle,UpTime,Case When IsRecom = 1 And IsRecomTime > getdate() And IsRecomTime > UpTime Then IsRecomTime Else UpTime End As AsDate

'
,@StrWhere='And siteid = 920 And IsZj = 0 And ZjId = 0 And IsChk = 1 And isdel = 0',
@StrIndex='id',@StrOrder='AsDate Desc,UpTime Desc,id Desc',@StrTotals=874

提示:
列名 'AsDate' 无效。

Case When IsRecom = 1 And IsRecomTime > getdate() And IsRecomTime > UpTime Then IsRecomTime Else UpTime End As AsDate
我使用普通SQL。就可以设置字段。这个在存储过程中应该怎么弄呢?
...全文
206 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
-晴天 2011-10-31
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 chinaxthulang 的回复:]
引用 3 楼 roy_88 的回复:
SQL code
' where 1=1 '+@StrWhere+@TempOrder+') '


就是這里出錯,AsDate Desc在字查詢是沒有這列

嗯。。打印出来了。

select top 40

id,oTitle,UpTime,Case When IsRecom = 1 And IsRecomTime > getda……
[/Quote]

把 case when 那一段,直接放到 order 里,而不要把子AsDate 放进去.
快溜 2011-10-31
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 chinaxthulang 的回复:]
引用 3 楼 roy_88 的回复:
SQL code
' where 1=1 '+@StrWhere+@TempOrder+') '


就是這里出錯,AsDate Desc在字查詢是沒有這列

嗯。。打印出来了。

select top 40

id,oTitle,UpTime,Case When IsRecom = 1 And IsRecomTime > getda……
[/Quote]没影响吧
ChinaXtHuLang 2011-10-31
  • 打赏
  • 举报
回复
已解决...结贴去。
-晴天 2011-10-31
  • 打赏
  • 举报
回复
你那个 AsDate 不是别名么!
ChinaXtHuLang 2011-10-31
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 roy_88 的回复:]
SQL code
' where 1=1 '+@StrWhere+@TempOrder+') '


就是這里出錯,AsDate Desc在字查詢是沒有這列
[/Quote]
嗯。。打印出来了。

select top 40

id,oTitle,UpTime,Case When IsRecom = 1 And IsRecomTime > getdate() And IsRecomTime > UpTime Then IsRecomTime Else UpTime End As AsDate

from Home_ChuShou where id not in (select top 40 id from Home_ChuShou where 1=1 And siteid = 920 And IsZj = 0 And ZjId = 0 And IsChk = 1 And isdel = 0 order by AsDate Desc,UpTime Desc,id Desc) And siteid = 920 And IsZj = 0 And ZjId = 0 And IsChk = 1 And isdel = 0 order by AsDate Desc,UpTime Desc,id Desc


如果我改存储过程。3楼的那里的排序去掉。会不会影响我的分页错误啊?
中国风 2011-10-31
  • 打赏
  • 举报
回复
exec sp_Page @iPage =2,@iPageSize=40,@StrTable='Home_ChuShou',@StrText=' id,oTitle,UpTime,Case When IsRecom = 1 And IsRecomTime > getdate() And IsRecomTime > UpTime Then IsRecomTime Else UpTime End As AsDate ' ,@StrWhere='And siteid = 920 And IsZj = 0 And ZjId = 0 And IsChk = 1 And isdel = 0', 
@StrIndex='id',@StrOrder='Case When IsRecom = 1 And IsRecomTime > getdate() And IsRecomTime > UpTime Then IsRecomTime Else UpTime End Desc,UpTime Desc,id Desc',@StrTotals=874


這樣傳參就正常了
--小F-- 2011-10-31
  • 打赏
  • 举报
回复
你这个好像是少了个嵌套 直接把别名拿来排序了
ChinaXtHuLang 2011-10-31
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 roy_88 的回复:]
AsDate Desc--這個列名不正確?

你查一下表Home_ChuShou
[/Quote]

AsDate是用动态创建的。
中国风 2011-10-31
  • 打赏
  • 举报
回复
' where 1=1 '+@StrWhere+@TempOrder+') '


就是這里出錯,AsDate Desc在字查詢是沒有這列
geniuswjt 2011-10-31
  • 打赏
  • 举报
回复

--你这个打印出来看看就知道了
print (@Sql)
--估计就是别名要先放临时表才能调用的问题,否则select外层获取不到
中国风 2011-10-31
  • 打赏
  • 举报
回复
AsDate Desc--這個列名不正確?

你查一下表Home_ChuShou

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧