2013-01-09 45 views
0

我在sql server中有一個視圖,每個項目應該返回一行。一些項目有多行。該視圖有很多表連接,所以我不想在每個表上手動運行腳本以找出哪個腳本導致重複。是否有一種快速自動化的方式來找出哪個表是問題表(又名有重複行的表)?查找哪個表在視圖中導致重複的行

+2

不需要。您必須查看基礎查詢。 – Kermit

回答

0

我使用了SpectralGhost技術的一個變種來獲得這個工作,即使這兩種方法都沒有真正解決避免手工檢查每個表的重複行的問題。
我的變化是使用分而治之的方法來註釋連接,而不是單獨註釋每個連接。由於連接的數量很多,這要快得多。

3

我發現的最快捷的方法是:

  1. 找到一個例子欺騙
  2. 複製出來的查詢
  3. 註釋掉所有聯接
  4. 添加加入回一次一個,直到你得到另一排

無論加入什麼地方,你開始變得愚蠢,是你有多個記錄的地方。

1

我的技巧是製作視圖的副本並對其進行修改,以便按照FROM子句的順序從每個表中返回每列,同時將表名與列名之間的額外列作爲列名稱(請參見下面的示例)。然後選擇幾行,然後慢慢向右掃描,直到找到沒有重複行數據的表,並且這是導致重複的行。

SELECT 
    TableA = '----------', TableA.*, 
    TableB = '----------', TableB.* 
FROM ... 

這通常是一種非常快速的查找方式。註釋連接的問題是,那麼每次都必須註釋掉select子句中的匹配列。

+0

在註釋連接的同時,我還取出除主表的主鍵以外的所有列,然後檢查返回的行數。這樣,當我評論/取消註釋聯接時,我不會遇到必須評論/取消註釋列的問題。 – skeletank

+0

對於我來說,計數行的問題是通常會增加行數而不存在重複的子細節。 – ErikE