我正在尝试从SQLServer表中删除多行,并在多个条件下进行匹配。
假设下表:
在我的c代码中,我有一个包含以下值的对象列表。假设这个列表的大小合适。
{Name = 'Bob', Address = '1600 Pennsylvania Avenue, Washington DC'},
{Name = 'Maria', Address = '21B Baker St, London, England.'}
删除这些值最干净的方法是什么?我不希望对列表中的每条记录运行一个查询。
通常我会这样做,但在这种情况下,它会清空我的整个表(这不是我想要的)。
DELETE FROM MyTable
WHERE Name IN ('Bob', 'Maria')
AND Address IN ('1600 Pennsylvania Avenue, Washington DC', '21B Baker St, London, England.')
这是可行的,但我不认为它是一个“干净”的一个体面的大小列表
DELETE FROM MyTable
WHERE
(Name = 'Bob' AND Address = '1600 Pennsylvania Avenue, Washington DC') OR
(Name = 'Maria' AND Address = '21B Baker St, London, England.')
我在c应用程序中使用dapper,因此dapper代码段和原始sql都可以帮助我。作为一个对干净的sql的吸盘,我真的很好奇它有多干净。
非常感谢!
2条答案
按热度按时间r55awzrz1#
这里有几件事要考虑。当您部署另一个sql字符串变体时,您不仅要生成一个新字符串(应用程序中的分配),还要在sql服务器上生成查询计划。每个排列都有自己的计划和缓存。这在小范围内可能不重要,但值得记住。
通常最干净的方式大多数事情都是最简单的。对于少量的项目,保持简单通常意味着一个循环。衣冠楚楚
IEnumerable
在参数中,当它找到一个可枚举项时,它将使用不同的参数执行相同的命令n
次。虽然这是到服务器的往返,对于大量的数据来说不是很好,但是它非常干净。假设是这样的:然后删除多个,如下所示:
dzjeubhm2#
对于sql
对于dapper,创建要删除的信息列表并序列化该列表,然后将该对象传递给dapper方法