将字母数字varchar转换为int

时间:2011-08-23 19:21:19

标签: sql-server-2005

我正在使用此脚本

select * from mxiv_sentries where 
attrname='mskeyvalue' and mskey in
(select mskey from mxiv_sentries where attrname='MXREF_MX_PRIVILEGE' and searchvalue='672081'
and mskey not in
(select Default_login from mxman_rt_u.VPN))

这是两个不同的表,其中Default_login是字母数字,varchar和mskey是INT中的数字。因此,当我执行此脚本时,我最终会收到错误:

  

Msg 245,Level 16,State 1,Line 1转换时转换失败   varchar值'A15271'到数据类型int。

您能否建议如何获得正确的结果 感谢

1 个答案:

答案 0 :(得分:5)

'A15271'表中的Default_Login字段中显然有VPN的值。

如果这是varchar,您需要

  • (最好)不比较数字因为,你知道,它们是不同的数据类型而不是等价的
  • 在比较之前,
  • 或(不太优选地)CAST int作为Varchar。这将有一些开销,可能会使您的索引没有实际意义,但在像这样的查询中,这样的结构甚至可能不存在索引。