[英]Delete Multiple rows in several tables
我在 SQL 數據庫中有 3 個表:
我希望能夠根據購物車從Animals和Animal Status表中刪除幾個項目。
所有表之間的相同之處是 AnimalID,它是所有表中的主鍵,基於此我應該刪除它們。 但同時我需要為擁有特定電子郵件的人刪除它。
例如,如果我有一個電子郵件為 123@gmail.com 的人,並且此人的購物車 1 中有 2 只動物,ID 為 123,另一只動物的 ID 為 456,我需要從其他 2 個表中刪除這 2 只特定動物。
我知道如何為 1 張桌子做這件事,但當我有幾張桌子相互依賴時,根據特定的電子郵件,當購物車中還有其他電子郵件和動物時,我就不知道了。
這是它在外部的工作方式:
x= AnimalStatus.Delete(AdoptCart.GetAnimalId(Session["email"].ToString()).ToString());
if (x > 0)
{
x = Animal.Delete(AdoptCart.GetAnimalId(Session["email"].ToString()).ToString());
if (x > 0)
{
AdoptCart.RemoveAllbyEmail(Session["email"].ToString());
以下是按工作順序排列的所有刪除代碼:
根據動物 ID 刪除 AnimalStatus:
static public int Delete(string id)
{
int rowsAffected;
string strSql = string.Format("delete from AnimalStatus where AnimalID='" + id + "'");
rowsAffected = (int)dataservice.ExecuteNonQuery(strSql);
return rowsAffected;
}
根據動物的 ID 從動物表中刪除動物:
static public int Delete(string id)
{
int rowsAffected;
string strSql = string.Format("delete from Animal where AnimalID='" + id + "'");
rowsAffected = (int)dataservice.ExecuteNonQuery(strSql);
return rowsAffected;
}
從購物車表中刪除所有動物:
static public int Remove(string AnimalID)
{
int rowsAffected;
string strSql = string.Format("delete from Cart where AnimalID='" + AnimalID + "'");
rowsAffected = (int)dataservice.ExecuteNonQuery(strSql);
return rowsAffected;
}
這段代碼的問題是所有這些只刪除了 1 只動物,我需要刪除幾只。
我曾嘗試創建這樣的語句,但我沒有設法使它起作用。:
Delete Animal.*, AnimalStatus.*
FROM Animal INNER JOIN
AnimalStatus ON Animal.AnimalID = AnimalStatus.AnimalID INNER JOIN
Cart ON Animal.AnimalID = Cart.AnimalID
WHERE (Cart.UserEmail = N'Email')
根據我用文字給出的示例,應該刪除的內容如下在//removed
標記。
Cart Table
| AnimalID | Email_Addr |
--------------------------------------
| 123 | 123@gmail.com | //removed
| 456 | 123@gmail.com | //removed
| 765 | jj@gmail.com |
| 343 | bb@gmail.com |
| 256 | cc@gmail.com |
Animal Status Table
| AnimalID | Vaccinated |
--------------------------------------
| 123 | Yes | //removed
| 456 | Yes | //removed
| 765 | No |
| 343 | No |
| 256 | No |
Animals Tables
| AnimalID | Age |
--------------------------------------
| 123 | 3 | //removed
| 456 | 4 | //removed
| 765 | 3 |
| 343 | 7 |
| 256 | 10|
看看你目前的工作,你可以做一些事情。 您可以按照您的要求重寫查詢邏輯,但我在您的示例中沒有看到的是主鍵/外鍵關系。 因此,級聯不適用於您當前設置表格的方式。 這是級聯刪除的好文章。 級聯刪除
因此,如果您不想重寫所有內容,您真的可以在 C# 代碼中完成所有這些操作。 您所要做的就是遍歷購物車表並獲取所有包含電子郵件“123@gmail.com”的 ID,然后調用您的三個刪除語句。 您只需要編寫一個方法來獲取 id 並調用 delete 方法,直到 id 變量為空。
這僅取決於您希望所有邏輯存在的位置,在 sql 中還是在您的 C# 代碼中。 如果您使用實體框架,無論是代碼優先還是數據庫優先,您都可以選擇使用 LINQ 查詢語法或擴展方法。 只是真的取決於偏好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.