实施例-表。下表没有主键(只有外键):
col1 col2 col3 col4
1 1 A X
1 1 A Y
1 1 B Y
1 1 A -
1 1 - -
1 2 A X
1 2 A Y
1 2 B -
1 2 A -
1 2 - -
现在有一个列表具有完全相同的值 - 但缺少其中一个或多个。 例如,具有1-1-A-Y的行和具有1-1-B-Y的那一行
我不想说"从...删除,其中col1 = 1,col2 = 1,col3 = A,col4 = Y"等等。 如果这很容易,我不会在这里问。
必须解决差异评估问题。
我尝试使用用户定义的表类型(代表数组),其中我保留了应保留的所有值,然后只需调用delete from .. where [value] not in (select s from @my_array)
它适用于一列,但只要有一秒,它(显然)就会失败。 为什么?因为在上面的示例中,在第一列和第二列中存在SAME值,并且只要它相等,语句"不在"是假的。
有人建议如何实现这个目标吗?
答案 0 :(得分:0)
如果您使用SQL Server作为数据库,也许您可以使用MERGE语句。
它允许您根据两个不同源(表,select语句,...)的行之间的匹配或不匹配来执行某些操作。
Here是微软的官方文章。
希望它可以提供帮助!
答案 1 :(得分:0)
我对你的描述和示例感到困惑,但我可以看到你想删除行,如果它们有空单元格吗?
这是函数:
public static void RemoveNullColumnFromDataTable(DataTable dt, string[] columnName)
{
for (int i = dt.Rows.Count - 1; i >= 0; i--)
{
foreach (string column in columnName)
{
if (dt.Rows[i][column] == DBNull.Value)
{
dt.Rows[i].Delete();
}
}
}
dt.AcceptChanges();
}
所以你运行它:
string[] columnsToFilter = {"Col1", "Col2", "Col3", "Col4");
staticClass.RemoveNullColumnFromDataTable(yourDataTable, columnsToFilter);