2009-09-16 20 views
0

我試圖確定一個比許多IF/THEN語句更好的方法來確定一個或多個表是否包含一個forign鍵的引用。我只需要知道(真/假)在20個表中的任何一箇中是否存在一行。所有表格都有相同的fk字段。確定一個fk的行是否存在於20個表中的任何一箇中

我希望這是有道理的,如果不是,我會嘗試進一步解釋。

+0

SYS.FOREIGN_KEYS和SYS.TABLES ... – 2009-09-16 02:42:23

回答

1

我不確定我是否理解這個問題。以下幾點會改善你的情況嗎?

if exists(select * from Table1 where ForeignKeyColumn = searchValue) 
    or exists(select * from Table2 where ForeignKeyColumn = searchValue) 
    or exists(select * from Table3 where ForeignKeyColumn = searchValue) 
    or ... 
+0

這是更簡潔一點 - 謝謝。 – schmoopy 2009-09-16 03:01:19

0

假設20個表保持一致,那麼對每個表使用左外部聯接又如何呢?可能效率低下,但應該工作

select Id from 
    (Select PK.id, isnull(tbl1.fk,0) as fk1, isnull(tbl2.fk,0) as fk2 ... etc 
    from pk left join tbl1 on pk.id = tbl1.fk left join 
     tbl2 on pk.id = tbl2.fk ... etc) as VirtualTable 
Where fk1>0 or fk2>0 ... etc 
0

所以,你正在努力解決,如果你可以刪除一個特定的行?

所以......也許嘗試:

begin tran; 
delete tablename 
where id = 3; 
rollback tran; 

然後看看會發生什麼樣的錯誤(如果有的話),和許多行如何受影響。

0

什麼是這樣的:

if exists (
select * from Table1 where MyKey = @key 
union 
select * from Table2 where MyKey = @key 
union 
select * from Table3 where MyKey = @key 
... 
) 

我沒有在我面前打開一個SQL Server實例,所以我敢肯定,有了這樣一個語法錯誤的地方,但你的想法=)

+0

可能想要工會全部提高速度,因爲您只是在考慮未返回信息 – HLGEM 2009-09-16 13:22:32

相關問題