首页 新闻 会员 周边

sql 在拼接字符串的时候,如果运用运算符

0
[已关闭问题] 关闭于 2016-12-02 14:09

有这样一段拼接的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+'''
'

这里在遇到%,/ 这样的运算符的时候就报错,不知给位大神有什么好的处理办法??

gyangjing的主页 gyangjing | 初学一级 | 园豆:4
提问于:2016-08-08 14:45
< >
分享
所有回答(5)
0

我觉得这玩意儿吧,你你的totalCount有了,在程序里多算一下也不多,非得拼sql,你写存储过程也比这好看多了。。。

顾晓北 | 园豆:10844 (专家六级) | 2016-08-08 14:54

那个写法当然是可以的,但是不满足我的需求,现在就是需要这样来拼接字符串,里面有很多的运算符,该如何实现?

支持(0) 反对(0) gyangjing | 园豆:4 (初学一级) | 2016-08-08 15:58

@gyangjing: 跟你在sql管理器里写的一样,懒得写。。。

支持(0) 反对(0) 顾晓北 | 园豆:10844 (专家六级) | 2016-08-08 16:00

@顾晓北: 但是这样写,是有问题的,尤其是遇到%,/这样的运算符的时候会报错。。。

支持(0) 反对(0) gyangjing | 园豆:4 (初学一级) | 2016-08-08 17:38
0

sql里面有专门进行数学运算的方法,你百度一下相应的运算方法替代运算符号应该就可以了

风归云隐 | 园豆:416 (菜鸟二级) | 2016-08-09 10:50

这个怎么替换?不懂。。。

支持(0) 反对(0) gyangjing | 园豆:4 (初学一级) | 2016-08-09 13:33

@gyangjing: 那些方法我也不记得,你百度一下都可以找得到的

支持(0) 反对(0) 风归云隐 | 园豆:416 (菜鸟二级) | 2016-08-09 14:16
0

双斜杠 代替单斜杠

斜杠是 c#的转移符

你应该去好好的理解一下 c# 的转义符和 @的作用

小眼睛老鼠 | 园豆:2731 (老鸟四级) | 2016-08-10 16:09
0

@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 

 

悦光阴 | 园豆:2251 (老鸟四级) | 2016-08-20 18:25

 这个是正确解决方案, 正确答案自己可以根据这个方案得出, 写拼接语句的时候, 可以多打印出来

 

print @sql  查语句 或者复制出来再试试执行. 

支持(0) 反对(0) Shannon | 园豆:611 (小虾三级) | 2016-09-06 09:24
0

其实想写得优雅一点,  建议将复杂的代码拆多几段来写,  SQL2005以上版本用WITH函数很方便.

Shannon | 园豆:611 (小虾三级) | 2016-09-06 09:26
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册