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

标签 sql sql-server sql-delete where-in sql-in

我有一个如下所示的表设置:

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

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

ErrorNumber 245 - "Conversion failed when converting the varchar value to data type int."

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

如果我删除 3 个名称中的任何一个,使 IN 条件为 1 或 2 个名称,它运行正常,但我需要在同一查询中删除第三行。我可以做什么来实现这个目标?

最佳答案

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

您应该使用正确的类型进行比较。如果我必须猜测的话,那就是:

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

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

关于sql - DELETE FROM 查询上的多个 IN 条件引发 #245 转换类型错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46477784/

相关文章:

postgresql - 删除所有违反新的唯一约束的记录

php - 该行在 MySQL 中没有被删除并且 PHP 没有返回错误

sql - 数据库设计,哪个表有外键

mysql - 在 MySQL 中按顺序更新双 (2-D) 列

sql-server - 如何在 T-SQL 事务外执行插入和更新

sql - String_Split 多列

php - .NET Framework 中的 mysql_real_escape_string()

python - Sqlite python - 如何按日期排序(最新的在前)

使用连词执行查询时的 SQL 行为

mysql - 删除表中的重复条目