当前位置: 代码迷 >> Sql Server >> 动态语句的求和出错,该如何处理
  详细解决方案

动态语句的求和出错,该如何处理

热度:89   发布时间:2016-04-27 16:15:00.0
动态语句的求和出错

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.

[email protected]

请问怎么解决?

------解决方案--------------------
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关键字.
------解决方案--------------------
[email protected]
转化的格式:cast(@Total as char(18))
------解决方案--------------------
int型变量在动态SQL中必须用cast或convert转换为字符串
------解决方案--------------------
为什么用个N就可以把变量放在引号中啊?
----------
[email protected],表示是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
这样不行吗
  相关解决方案