我必须删除产品及其图片。图像位于单独的表中,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命令的cascade? p>
答案 0 :(得分:2)
这是您可以在数据库中定义的内容。只需将Products和ProductsImages之间的外键关系定义为“ON DELETE CASCADE”即可。然后,删除产品将自动删除所有关联的ProductImages。
答案 1 :(得分:1)
如果您不想更改索引,可以通过在一个命令中执行多个操作来避免两次往返:
string deleteStuff = @"
DELETE FROM [ProductsImages] WHERE ProductId = @ProductId;
DELETE FROM [Products] WHERE ProductId = @ProductId;"
db.ExecuteNonQuery(deleteStuff);
答案 2 :(得分:0)
DELETE p.*, i.*
FROM Products p
LEFT JOIN ProductImages i ON p.ProductId = i.ProductId
WHERE p.ProductId = @ProductId
修改强> SQL Server不支持