--这个是一个乘法,两个值都要是数字
QTY * @MEDIAN
但你在定义为字符型,所以报错了
sp_executesql 还没强大到能解析表达式的地步
如果你要使用表达式就直接拼接SQL就得了
DECLARE @SQL NVARCHAR(1024),@MEDIAN NVARCHAR(12)
SET @MEDIAN=
N'CASE LEFT(STU_CODE, 3) WHEN ''SUB'' THEN 4.70 WHEN ''LID'' THEN 0.73 WHEN ''INK'' THEN 31 END'
SET @SQL='SELECT QTY * ‘+@MEDIAN+’ AS TOTAL_PRICE
FROM COP_STUDENTS ';
exec (@sql)
这是因为你定义的@MEDIAN NVARCHAR(12)是字符类型
而sp_executesql的参数化会将一切参数都转换为字符,
也就是QTY *'CASE LEFT(STU_CODE, 3) WHEN ''SUB'' THEN 4.70 WHEN ''LID'' THEN 0.73 WHEN ''INK'' THEN 31 END'
这个字段与整个这个字符相乘,所以这类计算的字符还是要拼接到@sql中
或者把case when写在里面,另定义其他的参数如'sub'或4.70这类的