我正在尝试创建一个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时出错
有人知道我该如何解决它?
谢谢大家!
答案 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函数