将字母数字varchar转换为int

0 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))
Run Code Online (Sandbox Code Playgroud)

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

当将varchar值'A15271'转换为数据类型int时,消息245,级别16,状态1,行1转换失败.

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

JNK*_*JNK 5

您显然在表'A15271'中的Default_Login字段中有值VPN.

如果这是一个varchar,你需要

  • (最好)不要将它与NUMERICS进行比较,因为它们是不同的数据类型而不是等价的
  • 或(较不优选)CASTint作为Varchar比较之前.这将有一些开销,可能会使您的索引没有实际意义,但在像这样的查询中,这样的结构甚至可能不存在索引.