sql语句,order by后加参数问题

21xxb 2011-05-17 08:01:23
  在VS2008中用xsd做DAL层,每条SQL语句都写在了相应的TableAdapter中,我想在分页的sql语句order by后加参数能不能做啊,应该怎么做呢?

  在网上查了很多资料,都是说order by后不能跟变量。

  要求是在VS的查询配置向导中写。
...全文
637 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
chen_ya_ping 2011-05-17
  • 打赏
  • 举报
回复
xsd,这个不建议使用啊,你实在不想写sql,你可以用linq啊。
hl362496158 2011-05-17
  • 打赏
  • 举报
回复
数据库拼接吧。还没见过orderby后面接参数的,可能是我资历有限啊!!
Rock870210 2011-05-17
  • 打赏
  • 举报
回复
不能加参数,但是可以拼凑Sql
格桑花 2011-05-17
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 qiudong_5210 的回复:]
引用楼主 21xxb 的回复:
  在VS2008中用xsd做DAL层,每条SQL语句都写在了相应的TableAdapter中,我想在分页的sql语句order by后加参数能不能做啊,应该怎么做呢?

在网上查了很多资料,都是说order by后不能跟变量。

要求是在VS的查询配置向导中写。


用xsd文件的话,你可以使用存储过程啊……
而且写个分页的存储过程还是不错的…………
[/Quote]

++++
qiudong_5210 2011-05-17
  • 打赏
  • 举报
回复
[Quote=引用楼主 21xxb 的回复:]
  在VS2008中用xsd做DAL层,每条SQL语句都写在了相应的TableAdapter中,我想在分页的sql语句order by后加参数能不能做啊,应该怎么做呢?

在网上查了很多资料,都是说order by后不能跟变量。

要求是在VS的查询配置向导中写。
[/Quote]

用xsd文件的话,你可以使用存储过程啊……
而且写个分页的存储过程还是不错的……

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go




CREATE PROCEDURE [dbo].[Module_Common_PagerNew]
@tableName varchar(500), -- 表名
@tableFields varchar(5000) = '*', -- 字段名(全部字段为*)
@sqlWhere varchar(5000) = NULL, -- 条件语句(不加 where,可带 group by 分组条件,分组条件需要带 group by 关键字)
@orderFields varchar(5000), -- 排序字段(必须,支持多字段,不加 order by)
@pageSize int, -- 页大小(每页多少条记录)
@pageIndex int = 1 , -- 指定当前为第几页
@totalPage int output, -- 返回总页数
@totalRecord int output
AS
BEGIN
Begin Tran -- 开始事务

Declare @sql nvarchar(4000);
-- Declare @totalRecord int;

-- 计算总记录数
if (@sqlWhere = '' or @sqlWhere = NULL)
set @sql = 'select @totalRecord = count(*) from ' + @tableName
else
BEGIN
if(CHARINDEX('group by', LOWER(@sqlWhere)) > 0)
set @sql = 'select @totalRecord = count(*) from (select ' + @tableFields + ' from ' + @tableName + ' where ' + @sqlWhere + ') as Tab_GroupTable'
else
set @sql = 'select @totalRecord = count(*) from ' + @tableName + ' where ' + @sqlWhere
END

--print @Sql

EXEC sp_executesql @sql,N'@totalRecord int OUTPUT',@totalRecord OUTPUT

-- 计算总页数
select @totalPage=CEILING((@totalRecord+0.0)/@pageSize)

-- 处理页数超出范围情况
if @pageIndex<=0
Set @pageIndex = 1
if @pageIndex>@totalPage
Set @pageIndex = @totalPage

-- 处理开始点和结束点
Declare @startRecord int
Declare @endRecord int
set @startRecord = (@pageIndex-1)*@pageSize + 1
set @endRecord = @startRecord + @pageSize - 1

-- 合成sql语句
if (@sqlWhere = '' or @sqlWhere = NULL)
set @sql = 'Select * FROM (select ROW_NUMBER() Over(order by ' + @orderFields + ') as rowId,' + @tableFields + ' from ' + @tableName
else
set @sql = 'Select * FROM (select ROW_NUMBER() Over(order by ' + @orderFields + ') as rowId,' + @tableFields + ' from ' + @tableName + ' where ' + @sqlWhere

set @Sql = @Sql + ') as Tab_TotalTable where rowId between ' + Convert(varchar(50),@startRecord) + ' and ' + Convert(varchar(50),@endRecord)

print @Sql

Exec(@Sql)

if @@Error <> 0
BEGIN
RollBack Tran
Return -1
END
else
BEGIN
Commit Tran
Return @totalRecord --- 返回记录总数
END
END
子夜__ 2011-05-17
  • 打赏
  • 举报
回复
不能用参数

可以变通一下 2条语句啊。
marrubiin 2011-05-17
  • 打赏
  • 举报
回复
order by后面应该跟的是数据库中的列名
liujianaemail 2011-05-17
  • 打赏
  • 举报
回复

拼成sql语句行不?
string orderSql =" order by "+列;

select * from *** +orderSql
  • 打赏
  • 举报
回复
CASE

WHEN XXX like 'XXX' THEN XXOO

END

试试。。。
Jack2013tong 2011-05-17
  • 打赏
  • 举报
回复
建议用三层结构来开发吧,这样灵活性很强,
小明aa 2011-05-17
  • 打赏
  • 举报
回复
可以拼接SQL语句
liue_0612 2011-05-17
  • 打赏
  • 举报
回复
select 字段 from 表名
where 条件
order by 字段
---------
后面的字段 你可以使用参数来接收
21xxb 2011-05-17
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 wxr0323 的回复:]
不能用参数

可以变通一下 2条语句啊。
[/Quote]

可以详细点吗?

种种原因用了xsd,有些问题真是能把人害死,哪怕在一般看来很简单的。
sowuqing 2011-05-17
  • 打赏
  • 举报
回复
order by 后面只能跟列名,你可以拼接sql语句,最后执行
wolf1947 2011-05-17
  • 打赏
  • 举报
回复
order by后面应该跟的是数据库中的列名,不过你可以平凑参数!

62,071

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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