3

我必须删除产品及其图像。图像在单独的表中,productId 充当外键。这是执行此操作的单个查询。

string deleteImages = @"DELETE FROM [ProductsImages] WHERE ProductId IN (SELECT ProductId FROM [Products] WHERE ProductId = @ProductId)";
string deleteProduct = @"DELETE FROM [Products] WHERE ProductId = @ProductId";
       db.ExecuteNonQuery(deleteImages);
       db.ExecuteNonQuery(deleteProduct);  

我没有办法避免编写 2 个不同的查询,在没有 alter 命令的情况下删除级联有什么帮助吗?

4

3 回答 3

2

这是您可以在数据库中定义的内容。只需将 Products 和 ProductsImages 之间的外键关系定义为“ON DELETE CASCADE”即可。删除产品将自动删除所有关联的 ProductImage。

于 2013-11-07T09:59:20.893 回答
1

如果您不想更改索引,则可以通过在一个命令中执行多个操作来避免两次往返:

string deleteStuff = @"
  DELETE FROM [ProductsImages] WHERE ProductId = @ProductId;
  DELETE FROM [Products] WHERE ProductId = @ProductId;"
db.ExecuteNonQuery(deleteStuff);
于 2013-11-07T10:01:39.863 回答
0
DELETE p.*, i.*
FROM Products p
LEFT JOIN ProductImages i ON p.ProductId = i.ProductId
WHERE p.ProductId = @ProductId

编辑 SQL Server 不支持

于 2013-11-07T10:07:04.960 回答