2010-01-29 60 views
1

我揹負着一個ERP數據庫,它缺少任何外鍵,因此缺乏參照完整性。查找SQL Server 2000中的孤立記錄

我正在寫一個腳本來檢查我們數據庫中大部分關於ophaned記錄的主要表格。

例如,在這種情況下,我正在使用我們的銷售表。

SLCDPM - Customer Master Table 
SOMAST - Sales Order Master 
SOITEM - Sales Order Items 
SORELS - Sales Order Releases 

基本上,這些(和一大堆其他表),我需要檢查,看看是否有沒有出現在它上面的任何表SORELS記錄。然後採取SOITEM並檢查它上面。等

我開始寫腳本,但行數有點荒謬。這就是我從這4張桌子開始的地方。

select 'Sales Order Master',* from somast where fcustno not in (select fcustno from slcdpm where ftype <> 'P') 
SELECT 'Sales Order Item',* FROM soitem WHERE fsono NOT IN (SELECT fsono FROM somast) 
select 'Sales Order Release',* from sorels where (fsono+finumber) not in (select (fsono+finumber) from SOITEM) 

我停下來的原因是,我只是意識到SORELS(下表)只檢查表前,不是所有的表之前。

任何人都知道一個腳本,我可以使用這個更自動化或更好的方式來做到這一點?

回答

2

而人們就這樣銷售數據庫垃圾;它總是讓我驚訝於我在商業產品中看到的東西。

這是動態sql和遊標的真實案例,我想。這正是這種一次性管理功能,這就是爲什麼這些技術存在的原因(它們主要不是用於生產代碼,而是用於管理任務)。

我會創建一個表,顯示每個表和表,我認爲它應該有一個foriegn鍵。 (如果他們至少有一個好的命名約定,你甚至可以從系統表中填充它)。

然後,我將使用遊標遍歷表並創建SQL dymanically查看如果FK表有孤立的記錄。

它仍然是很多的代碼,但至少你不必寫所有。