有这样一段拼接的sql字符串:
Set @Sql=@Sql+'
select * from (
select *,
(select count(*) from Sales_Doc_Detail) as totalCount,
(select case when count(*) % '''+ @pageSize+'''=0 then count(*) / '''+@pageSize+''' else count(*) /'''+ @pageSize+'''+1 end from Sales_Doc_Detail) as pageCount,
ROW_NUMBER() OVER (order by SalesDetailID) AS RowNum
from Sales_Doc_Detail
) t
where RowNum between '''+ @startIndex +''' and '''+@endIndex+'''
'
这里在遇到%,/ 这样的运算符的时候就报错,不知给位大神有什么好的处理办法??
我觉得这玩意儿吧,你你的totalCount有了,在程序里多算一下也不多,非得拼sql,你写存储过程也比这好看多了。。。
那个写法当然是可以的,但是不满足我的需求,现在就是需要这样来拼接字符串,里面有很多的运算符,该如何实现?
@gyangjing: 跟你在sql管理器里写的一样,懒得写。。。
@顾晓北: 但是这样写,是有问题的,尤其是遇到%,/这样的运算符的时候会报错。。。
sql里面有专门进行数学运算的方法,你百度一下相应的运算方法替代运算符号应该就可以了
这个怎么替换?不懂。。。
@gyangjing: 那些方法我也不记得,你百度一下都可以找得到的
双斜杠 代替单斜杠
斜杠是 c#的转移符
你应该去好好的理解一下 c# 的转义符和 @的作用
@pagesize 是int 类型吧,你需要转换一下,对吧,写完动态sql,没有check 吗?
declare @sql nvarchar(max)='' declare @pagesize nvarchar(10)='10' Set @Sql=@Sql+' select * from ( select *, (select count(*) from Sales_Doc_Detail) as totalCount, (select case when count(*) % '''+ @pageSize+'''=0 then count(*) / '''+@pageSize+''' else count(*) /'''+ @pageSize+'''+1 end from Sales_Doc_Detail) as pageCount, ROW_NUMBER() OVER (order by SalesDetailID) AS RowNum from Sales_Doc_Detail ) t where RowNum between ' select @sql --details select * from ( select *, (select count(*) from Sales_Doc_Detail) as totalCount, (select case when count(*) % '10'=0 then count(*) / '10' else count(*) /'10'+1 end from Sales_Doc_Detail) as pageCount, ROW_NUMBER() OVER (order by SalesDetailID) AS RowNum from Sales_Doc_Detail ) t where RowNum between
这个是正确解决方案, 正确答案自己可以根据这个方案得出, 写拼接语句的时候, 可以多打印出来
print @sql 查语句 或者复制出来再试试执行.
其实想写得优雅一点, 建议将复杂的代码拆多几段来写, SQL2005以上版本用WITH函数很方便.