【发布时间】:2018-10-25 07:21:02
【问题描述】:
这是我的查询:
declare @process varchar(50) ,@id int
set @id=11
set @process='PRODUCTION'
update Tracking
set TargetbyHour = (
(
select cast(replace(costbyhour, '.','')/1 as integer)
from Tracking
where trackingid = @TrackingID
) /
(
(select @process
from [dbo].[BillingSheet]
where id=@id
)
)
)
where TrackingID=@TrackingID
这是错误:
消息 245,第 16 级,状态 1,第 26 行 将 varchar 值“PRODUCTION”转换为数据类型 int 时转换失败。
注意:PRODUCTION是表列名数据类型是float
【问题讨论】:
-
如果我手动输入 PRODUCTION,它可以工作,但我只想传递参数
-
不,@process 是一个
varchar(50),你碰巧设置为字符串'PRODUCTION',当你Select @process你得到varchar(50)。 -
在编写基于注入字符串生成任意 TSQL 的存储过程之前,我建议阅读此参考资料sommarskog.se/dynamic_sql.html
-
根本不需要使用动态SQL。你可以
UNPIVOT[dbo].[BillingSheet]然后你可以使用WHERE过滤掉'PRODUCTION'行。
标签: sql sql-server tsql