sql - 我想在sql server存储过程中传递参数选择查询

标签 sql sql-server tsql

这是我的查询:

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/

相关文章:

sql - 在 Solr 查询中使用内连接

sql - 网络适​​配器无法在 SQL 开发人员中建立连接

mysql - 单独的姓氏和名字表

java - 列索引无效

sql-server - 由 SQL Server 2012 的等待类型 OLEDB 锁定

sql - 从具有内部联接的 SQL 表中删除

sql - 每小时分组需要与前一小时数据相加并与 SQL Server 中的另一个字段相减

sql - Teradata SQL - 非常大的拉动

mysql - 错误 SQL : Cannot add or update a child row: a foreign key constraint fails

sql-server - 您是否应该总是预见到参数嗅探引起的问题?