2010-11-11 74 views
0

我試圖僅在兩個SQL Server 2008數據庫之間複製數據。我需要保持現有的存儲過程和函數不變並僅複製數據。數據庫模式是相同的,但即將遇到PK的問題。僅在兩個數據庫之間複製數據

我第一次嘗試:

EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL' 
EXEC sp_MSForEachTable 'DELETE FROM ?' 

要刪除所有數據。但得到

Failure inserting into the read-only column 

所以我又試圖設置IDENTITY_INSERT上的所有表有:

EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL' 
EXEC sp_MSForEachTable 'DELETE FROM ?' 
EXEC sp_MSForEachTable 'ALTER TABLE ? SET IDENTITY_INSERT ON' 

沒有運氣。

什麼是僅有的兩個數據庫之間的數據導出,離開原來的特效和功能完好的最佳方法?

謝謝。

編輯:林使用SQL導出,將數據複製從源到目的地。我需要保留目標數據庫特效和功能,只複製數據。

+1

看起來你並不需要保存在第二個表現有數據,而只是使數據的精確副本中的第一個。那是對的嗎? – 2010-11-11 20:36:57

+0

不,目標數據庫將沒有數據,但我需要保持特效和funcs完好無損。我將使用DELETE FROM擦除目標數據庫?上面的命令;在我開始之前它會有數據。因此它將是一個包含數據的空數據庫。 – Jammin 2010-11-11 20:40:31

回答

1

我可能會從另一個角度來看待它:通過將所有對象通過SQL企業管理器編寫到文件中並在空白數據庫上運行此文件。這樣,您將擁有所有元數據,但第二個數據庫中沒有實際數據,您可以將其用於未來的其他副本。

2

剛剛從第二數據庫中的所有表pkeys刪除身份規範。

什麼是可能在這裏發生的是,你必須p鍵在這兩個DBS標識列,它是有道理的第一個這樣做的,但你不能複製它的值寫入另一個身份列。

無論如何,你不希望pkey作爲第二個分區中的身份密鑰,那麼你的所有外鍵都不起作用。

+0

有沒有這樣做的全球方式,我可以輕鬆地恢復後?謝謝 – Jammin 2010-11-11 21:15:12

1

你所得到的錯誤似乎並不像一個PK違規或身份問題。我看到了兩個可能的原因:

  1. 如果您收到試圖插入數據時出錯,我會檢查表有任何computed columns。許多程序在導出數據時未考慮到它們,並將計算列包含在插入列列表中。

  2. 如果在刪除步驟中出現該錯誤,可能是因爲刪除觸發了一個觸發器,它會嘗試插入數據並因某種原因失敗(這些觸發器的想法是保留已刪除的副本數據在另一個位置)。如果是這種情況,請修復插入或者只是禁用觸發器。

0

我在最後回答了這兩個問題。我使用第三個數據庫作爲臨時數據庫。

1)我做了數據庫的完整備份,我需要(live)的數據
2)我將這個備份恢復到了我的臨時數據庫。
3)I腳本我需要從,僅腳本特效和funcs中,並使用DROP和IF包括特效和功能數據庫。
4)我從#3運行腳本到臨時數據庫,從DB1獲得數據,從DB2獲取特效和funcs
5)我從臨時數據庫的備份中使用OVERWRITE恢復DB2。

如果可以的話,非常感謝你們的家人。

+0

您可以編輯您的答案,更明確地定義(DB1,DB2,DB3)名稱與(「臨時數據庫」,「實時」目標數據庫)之間的對應關係。 「我用第三個數據庫作爲臨時數據庫」是指「臨時數據庫」是DB3?那麼4)不清楚。 DB2是目標數據庫?我無法理解你爲什麼需要這些手工操作的「臨時數據庫」!? – 2010-11-13 03:21:04

相關問題