2012-08-07 77 views
1

我有一個任務存檔一些數據庫表。爲了簡化一切,我基本上要做到以下幾點:這是用存儲過程執行CRUD的正確方法嗎?

  1. 從表1檢索基於某些條件
  2. 插入這些行插入表中備份數據庫
  3. 從表1中刪除這些行的某些行

,我要在幾個表上執行這些操作。

article告訴我根據不同的CRUD操作(每個CRUD),以創建單獨的SP。可以看到,我需要執行的步驟是READ,UPDATEDELETE。然後基於這篇文章,我將爲每張表格需要3個SP。所以如果我有10個表需要備份,那麼我需要寫30個SP?

有人可以告訴我,如果這是正確的做法嗎?

感謝。

+1

您是否計劃定期執行此任務?如果不是,並且如果所需的表不會經常改變,那麼你可以在一個存儲過程中完成。如果表格會改變一個相當數量,你可以爲每個表格創建一個存儲過程。我有一個類似的問題,我只是爲每個對象/表創建一個'存檔'存儲過程。 – XN16 2012-08-07 20:04:34

+0

@AlexTyman,是的,這些任務將定期以Cron作業運行,並且表格會經常更改。所以你建議我爲每個表的每個CRUD操作創建單獨的存儲過程? – czchlong 2012-08-07 20:06:44

回答

2

發言代表我的學習曲線:當我開始與數據庫,我也沒想那麼多的事情我現在要做的。最簡單和更「合乎邏輯」的方法是在一個SP中執行CRUD,因爲根據你的場景,事情很小。 但是,當涉及到可擴展性時,您確實需要將它們分開。開始編寫程序是一個好習慣。 要指出的另一件事是,您可以將更多的訂單應用到您的數據庫中,效果會更好。

關於必須CRUD 10個表。不,你不需要30個SP(也許你會這樣做,但那是不太可能的情況)。您可以使用變量,參數和內容,以便使用參數(表名等)對多個表執行READ操作。與其他CRUD的操作相同。

因此,簡而言之:也許你最終不得不只是閱覽桌一個大而複雜的SP。但事情就是這樣,你一次努力工作,然後再次重複使用。 (這是做了一件好事,它會definetely幫助/保存你在未來,如果你不知道OOP)

+0

我明白你在說什麼了,謝謝。我也想到了這個想法,但是各個表格之間的列有所不同。儘管我可以對錶名進行參數化,但我如何參數化表列?正如您在我鏈接的文章中看到的,作者明確指出了所有列名稱。 – czchlong 2012-08-07 20:14:29

+0

select column_name,* from information_schema.columns其中table_name ='YourTableName'就是這樣做的方式,你可以讓他們列出他們,存儲他們,然後繼續完成任何你需要完成的任務。 – 2012-08-07 20:16:11

+0

在你的'select column_name,*'你的意思是'select column_name。*'?另外,我忘記提及我正在使用Sybase。 – czchlong 2012-08-07 20:18:48

0

考慮一個存儲過程來概括某種功能要執行。您正在嘗試將表中的數據存檔,因此我會調用存儲過程dbo.Archive_Table1。 「Archive_」是一個表示過程操作的前綴,後綴是您想要操作的對象(或多個對象)。

對於一個簡單的例子,假設你想在那都涉及到關於汽車的數據幾個表存檔數據。 dbo.Make,dbo.Model,dbo.Sales等。您可以創建一個名爲dbo.Archive_Cars的存儲過程,該過程作用於所有這些表。足夠詳細地告訴任何人看它你正在做什麼。

在您的新存儲過程中,隨意做任何你想做的事情。一起插入和刪除!它會讓你的生活更容易,而不必處理30個SP。當然,以後可能會最終創建一些其他的CRUD SP,但是可以根據需要進行。

你在問題中的提綱是完美的;只需將其轉換爲代碼即可設置。

相關問題