这是我的查询:
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
这是错误:
Msg 245, Level 16, State 1, Line 26 Conversion failed when converting the varchar value 'PRODUCTION' to data type int.
注意:PRODUCTION
是表列名数据类型是float
最佳答案
你不能在 SQL 中参数化标识符 - 所以
select @process
from [dbo].[BillingSheet]
where id=@id
将简单地返回存储在 @process
变量中的值 - 在这种情况下 - 'PRODUCTION'
如果你有多个具有相同数据类型的列并且你想选择从中选择哪一个,你可以使用案例:
select case @process
when 'PRODUCTION' then PRODUCTION
when 'TEST' then TEST
when 'DEV' then DEV
end As val
from [dbo].[BillingSheet]
where id=@id
请注意,case 表达式必须从它的所有分支返回相同的数据类型,因此如果列的数据类型不同,您必须将它们转换为最适合您需要的数据类型。
关于sql - 我想在sql server存储过程中传递参数选择查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52983553/