将数据类型varchar转换为bigint时出错 - IN子句

时间:2015-03-08 20:37:04

标签: c# sql sql-server

我正在尝试创建一个DELETE语句,我将使用IN子句基于id列表从表中删除一些项目:

DELETE FROM table WHERE id IN (@ids)

使用SqlCommand,我正在执行以下操作来生成IN参数:

public void DeleteItemsByIds(int[] ids) {

    Parameters["ids"] = string.Join(", ", ids);
    ExecuteNonQuery(deleteStatement, Parameters);
}

然后我收到一个错误:

  

将数据类型varchar转换为bigint时出错

有人知道我该如何解决它?

谢谢大家!

2 个答案:

答案 0 :(得分:2)

in期望左侧和右侧的类型兼容的列表。显然,in的左侧是数字,右侧是字符串。并且,您无法将字符串转换为数字,因为它是逗号分隔的列表。

快速而肮脏的解决方案是简单地使用like

DELETE
    FROM table
    WHERE ',' + @ids + ',' LIKE '%,' + CAST(id as VARCHAR(255)) + ',%';

但是,这在性能方面不是最理想的,因为它无法在id上使用索引。更好的解决方案需要了解有关使用SQL的应用程序的更多信息。

答案 1 :(得分:0)

这肯定会为您提供帮助

select * from tblusers where userid in(select value from String_Split('1,2,3,4',','))

String_Split是内置的SQL函数