DELETE FROM 查询上的多个 IN 条件引发 #245 转换类型错误

Posted

技术标签:

【中文标题】DELETE FROM 查询上的多个 IN 条件引发 #245 转换类型错误【英文标题】:Multiple IN Conditions on a DELETE FROM query throwing a #245 Conversion Type Error 【发布时间】:2018-03-10 16:58:26 【问题描述】:

我有如下表格设置:

Parameters
╔═══╦═════════╦════════╗
║ID ║ Name    ║ Value  ║
╠═══╬═════════╬════════╣
║ 7 ║ first   ║  0     ║
║ 7 ║ second  ║ -1     ║
║ 7 ║ third   ║ -1     ║
╚═══╩═════════╩════════╝

它包含更多行,但我只想删除上面列出的行。我在下面进行了以下查询来执行此操作,但是当您将第三个值添加到名称的 IN 条件时,我得到:

ErrorNumber 245 - “将 varchar 值转换为数据类型 int 时转换失败。”

DELETE FROM Parameters
    WHERE 
        ID = 7 AND 
        Name IN ('first', 'second', 'third') AND 
        Value IN (0, -1)

如果我删除了使 IN 条件为 1 或 2 的 3 个名称中的任何一个,它运行正常,但我需要在同一个查询中删除第三行。我该怎么做才能做到这一点?

【问题讨论】:

你的问题值得 +1 【参考方案1】:

显然,idvalue 是一个字符串。 SQL Server 必须决定使用什么类型。如果将字符串与数字进行比较,则使用数字。如果另一行的数字错误,则会出现类型转换错误。

您应该使用正确的类型进行比较。如果非要我猜的话,应该是value:

DELETE FROM Parameters
WHERE 
    ID = 7 AND 
    Name IN ('first', 'second', 'third') AND 
    Value IN ('0', '-1');

可以在诸如7 之类的数字常量周围加上单引号。我不鼓励这样做,因为误用类型是一种不好的编码习惯。

【讨论】:

这也是我的猜测 @Gordon 你是对的,它是价值列。非常感谢您的快速回复!一旦选项可用,我将立即接受答案。

以上是关于DELETE FROM 查询上的多个 IN 条件引发 #245 转换类型错误的主要内容,如果未能解决你的问题,请参考以下文章

mybatis 最大删除时为1000怎么解决 例如:delete from tableName t where t.id in (1000个id最大)

MySQL DELETE FROM 以子查询为条件

MySQL--5子查询与连接小结

MYSQL IN 或多个条件

配置数据源Where子句怎么添加多个查询条件并且用OR相连

finereport参数查询问题:查询条件中含有多个参数时怎么处理?例如where city_name in ()