日期:2014-05-17  浏览次数:20474 次

SQL字符串拼接
DECLARE @pageIndex int--第几页
SET @pageIndex=1
DECLARE @pageSize  int--每页显示条数
SET @pageSize=1
declare @SQL nvarchar(1000)
set @SQL=' select top ' + @pageSize+ ' from tbTeacherPlan where tpId not in (select top ' + (@pageIndex*@pageSize)+ ' tpId from tbTeacherPlan)'
Exec(@SQL)  
PRINT @SQL                   
exec sp_executesql @SQL 


消息 245,级别 16,状态 1,第 8 行
在将 varchar 值 ' select top ' 转换成数据类型 int 时失败。 这是为什么你 大虾们??

------解决方案--------------------
 @pageSize==>>ltrim(@pageSize)
(@pageIndex*@pageSize)==>>ltrim(@pageIndex*@pageSize)

------解决方案--------------------
这个问题是隐式转换导致的,具体可以看这个
http://msdn.microsoft.com/zh-cn/library/ms191530.aspx
更改脚本  
所有的字符串前面都加N''
所有的 int型都更改为cast(@pageSize as nvarchar(5))
------解决方案--------------------
不好意思,我的积分不够发贴的,所以来借楼主的帖子问个问题

如何更新WinXp x64的ADO控件版本?
我在Win7 x64上开发的VC程序,用的ADO6.1版本连接sql,要在 WinXP x64上使用,但是xp64上的ADO只有2.8版本,这个要怎么解决啊,可不可以升级xp64上的ADO版本?

现在我开发完的程序在xp64机器上报一个错误,弹出一个错误框,但是里面什么信息也没有,是个空白,我调试过,是遇到了__uuidof  或 _bstr_t 语句时会弹同这个错误,请大侠指教


------解决方案--------------------
set @SQL=' select top ' + @pageSize+ ' from tbTeacherPlan where tpId not in (select top ' + (@pageIndex*@pageSize)+ ' tpId from tbTeacherPlan)' 
你这一句就两处错误,1@p参数都是int型与字符串拼接的话要转换为字符型
2,' select top ' + @pageSize+ ' 这里未拼接列名' select top ' + @pageSize+ ' * from

通常exec sp_executesql @SQL 是参数化执行语句,应该尽可能的不要拼接参数而是传递参数


DECLARE @pageIndex int--第几页
SET @pageIndex=1
DECLARE @pageSize  int--每页显示条数
SET @pageSize=1
declare @SQL nvarchar(4000)
set @SQL=' select top (@pageSize) * from tbTeacherPlan where tpId not in (select top (@pageIndex*@pageSize) tpId from tbTeacherPlan)'
Exec(@SQL)  
PRINT @SQL                   
exec sp_executesql @SQL,N'@pageSize int,@pageindex int',@pageSize,@pageIndex