簡體   English   中英

刪除多個表中的多行

[英]Delete Multiple rows in several tables

我在 SQL 數據庫中有 3 個表:

  1. 動物狀況
  2. 動物
  3. 大車

我希望能夠根據購物車從AnimalsAnimal 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM