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
这样不行吗