2011-08-23 64 views

回答

2

使用而不是觸發器(根據其他數據庫是否位於不同服務器上,您可能需要也可能不需要鏈接服務器)。確保觸發器可以處理多行插入/更新/刪除。我還建議將檢查失敗的記錄移到異常表中。

3

鏈接的服務器不起作用。
FK必須指向本地表。
首選的方法是不是要做到這一點,儘管你可以拉幾個黑客來實現它。
例如,你可能有觸發器原因引用被創建/檢查,但我不會認爲等同於FK約束。

相關問題: Can you have a Foreign Key onto a View of a Linked Server table in SQLServer 2k5?

+0

好易遵循規則!我在討論_preferred_,因爲項目規格聲明某些特定的表必須位於主數據庫之外。我想我會混合你關於觸發器的建議,以及@HLGEM關於允許多次插入/刪除等的想法以及一個異常表來使其可審計。 – chok68

+0

@chok他們可以在同一臺機器上的不同數據庫? – Matthew

2

外鍵不能跨數據庫界限去。如果你嘗試這樣做,你會得到:

消息1763年,級別16,狀態0,第1行
跨數據庫的外鍵 引用不被支持。外鍵* **
消息1750,級別16,狀態0,1行
無法創建約束。查看以前的錯誤。

如果您需要強制執行某種兩個單獨的數據庫之間的關係,然後是 - 你可能需要一個鏈接服務器(如果第二個數據庫在第二臺服務器上),並可能觸發 - 但所有這些事情將非常難以正確,非常低效且非常容易出錯。

你可以做到這一點的一種方法是數據複製 - 將要引用的表複製到源數據庫中,然後與該複製表建立外鍵關係。但這永遠不會是「實時」和「實時」 - 數據複製也會有一點滯後。

相關問題