动态语句的求和出错
declare @ss nvarchar(1000)
declare @Total decimal(18,2)
set @total=0
set @ss= 'select ' + @total + ' = sum(isnull(Order_qty,0)) from tb '
execute (@ss)
select @Total
错误提示:
Error converting data type varchar to numeric.
若对@total进行数据类型转化也不行啊
请问怎么解决?
------解决方案--------------------declare @ss nvarchar(1000)
declare @Total decimal(18,2)
set @total=0
set @ss=N 'select @total = sum(isnull(Order_qty,0)) from tb '
execute sp_executesql @ss,N '@Total decimal(18,2) OUTPUT ',@total OUTPUT
select @Total
------解决方案--------------------N表示这个字符串常量是UNICODE的,之所以这样做是因为sp_executesql这个存储过程要求的,其前二个参数类型必须是UNICODE类型的.具体请参考sp_executesql帮助.
通常,当需要从动态SQL中返回值时,只能使用sp_executesql存储过程,并且将要返回的变量加上OUTPUT关键字.
------解决方案--------------------需要将变量@Total的数据类型转化成字符型:
转化的格式:cast(@Total as char(18))
------解决方案--------------------int型变量在动态SQL中必须用cast或convert转换为字符串
------解决方案--------------------为什么用个N就可以把变量放在引号中啊?
----------
因为你@ss定义的类型是nvarchar,表示是unicode字符,所以需要在字符串前面加个N
------解决方案--------------------你的查询语句语句里面又没有变量,干吗要用动态sql呢
直接:
declare @ss nvarchar(1000)
declare @total decimal(18,2)
select @total = sum(isnull(ksl01,0)) from #tmp where id <1000
execute sp_executesql @ss
select @total
这样不行吗