2012-06-08 165 views
1

這可能是我花了太多的時間看着今天這麼愚蠢。 但是........從表中刪除數據

我有一個簡單的存儲過程,這樣做;

BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 

    DELETE FROM ProductLoading 
END 

ProductLoading包括3個字段,非可放置鍵字段。這是一個臨時表,當數據從單獨的數據饋送加載時,需要短時間內有數據。我這樣做是爲了檢查刪除產品。

現在,當該代碼運行時,它也刪除了另一個表,​​中的所有內容。 如果我評論這條線,它不會。

不是鍵和索引的專家,但有一個基本的把握。 但看了兩個表,看不到任何依賴關係。 加上當我運行一個執行計劃時,它不會引用​​表。

真的停留在這一個。 任何人都可以教我什麼,我忽略了什麼。

回答

0

ProductLoading加載必須包含一個主鍵,該主鍵是啓用了級聯刪除的另一個表的外鍵。

enter image description here

+0

如果它是一個表,它的用處是暫時的一個,那麼它可能是在FK(S)導致級聯的,太。 – bluevector

+0

嗨,jonnyGold,G Aletras here ;-) – aletrasg

+0

今天午餐時我只是在談論你。宇宙真棒。 – bluevector

1

聽起來像Cascading Referential Integrity Constraints。你確定ProductLoading三個字段中的一個不是關鍵字嗎?

+0

剛看了ProductLoading表,那裏沒有鑰匙。我只是使用3個字段來存儲信息,以便我可以使用該信息稍後與Products3表進行交叉檢查。沒有限制。沒有索引。沒有觸發器。真讓我困惑。 – stumcc

0

從理論上講,您的表ProductLoading可能會觸發刪除?

+0

我之前已經說過了,我會再說一遍:觸發器很糟糕,可能......像一個乒乓球扔進了一個充滿捕鼠器的房間。 – bluevector

+0

假設我很久沒有使用它們了! ;-) –

+0

沒有觸發器。也不是鍵,索引或約束。只需3個基本字段來存儲加載的產品信息,以便稍後可以進行交叉檢查。 – stumcc

1

不知道發生了什麼小故障。

但是經過多次令人困惑之後,基本上在存儲過程中添加了一個dummy插入語句並重新編譯它。

奇怪的是,刪除語句然後沒有過濾到Products3表。

然後我刪除了這個僞插入語句,甚至更奇怪的存儲過程繼續工作。

現在唯一不同的是,當表格創建時出現了錯誤的模式。我立即意識到這一點,並在正確的模式下重新創建表並刪除錯誤創建的表。目前沒有數據存在,所以不確定在此期間是否有任何損壞。看不到,但是,嘿,1和0有時不能加起來。

所以無解正因爲如此,只是李