SQL Server选择在表格变量上的表现与实际表格不同
我有一张表,其中包含两个我关心的char列,name
和value
。第二列只有两种类型的字符串,形式为'######'
,形式为'#####/#####'
。显然,如果不是第二种数据类型,第二列应该是一个int。SQL Server选择在表格变量上的表现与实际表格不同
根据评论,这里是一个示例表。
[name] [value] ABC1 25 ABC2 13/45 ABC3 12/6 ABC4 15 ABC5 89 XYZ1 89 XYZ2 14 XYZ3 52 XYZ4 13 XYZ5 11
我需要从它的name
包含'XY'
其value
小于50
表中删除所有行。为了确定我需要删除这行,我可以运行
SELECT * FROM table WHERE name LIKE 'XY%' AND CONVERT(int,value)<50
返回
[name] [value] XYZ2 14 XYZ4 13 XYZ5 11
然而,我过于谨慎,并倾向于在可变第一,确保一个表执行删除操作我没有忽略任何东西。如果我首先将表中的所有数据插入到@TempTable
中,并且运行类似select语句,则查询在value = '13/45
的行上失败。 Conversion failed when converting the varchar value '13/45' to data type int.
是否有一些表变量会导致SQL Server查询它与标准表不同?
既然你是在2014年,你可以使用TRY_PARSE。如果某个值无法解析为指定的数据类型,它将返回NULL。
select *
from YourTable
where Name like 'XY%'
and TRY_PARSE([value] as int) < 50
还有一个问题:尽管2014年的工作有效,但我们只用2014进行测试和开发。令人烦恼的是,我们的生产服务器仍在运行2008. – user741172
..添加VALUE的where子句而不是“%/%”而不是? – SqlACID
样本数据...预期输出......你当前的查询......任何错误,将有助于 – scsimon
试图把提交您插入的数据不是Temptable –
@MohamedFadhl表变量不使用交易之后。谈到这一点,OP-你的问题是什么?它依赖于交易吗? – zambonee