没有Alter命令,删除级联行

时间:2013-11-07 09:43:52

标签: c# asp.net sql

我必须删除产品及其图片。图像位于单独的表中,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?

3 个答案:

答案 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不支持