SQL Server选择在表格变量上的表现与实际表格不同

问题描述:

我有一张表,其中包含两个我关心的char列,namevalue。第二列只有两种类型的字符串,形式为'######',形式为'#####/#####'。显然,如果不是第二种数据类型,第二列应该是一个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查询它与标准表不同?

+2

样本数据...预期输出......你当前的查询......任何错误,将有助于 – scsimon

+0

试图把提交您插入的数据不是Temptable –

+0

@MohamedFadhl表变量不使用交易之后。谈到这一点,OP-你的问题是什么?它依赖于交易吗? – zambonee

既然你是在2014年,你可以使用TRY_PARSE。如果某个值无法解析为指定的数据类型,它将返回NULL。

select * 
from YourTable 
where Name like 'XY%' 
    and TRY_PARSE([value] as int) < 50 
+0

还有一个问题:尽管2014年的工作有效,但我们只用2014进行测试和开发。令人烦恼的是,我们的生产服务器仍在运行2008. – user741172

+0

..添加VALUE的where子句而不是“%/%”而不是? – SqlACID