2013-05-14 52 views
0

我一直在處理一個問題幾個小時,我覺得我在圈子裏運行。如果在一個工會加入的多個陳述中存在條件

我正在寫一個腳本,它將檢查從舊數據庫到新表的一個表,它也希望查看錶中是否存在差異。我已經完成了這部分,但希望使輸出更易於閱讀。理想情況下,希望在表中有記錄時進行輸出,這意味着有差異。因此,如果表格1,4和8中存在差異,輸出結果會顯示爲表格1,表格4,表格8.我將添加我的代碼片段,但由於隱私原因,我需要更改一些內容。

if exists(
SELECT 'xyz' AS TableName, 1 FROM table1CD 
LEFT JOIN database2 CL ON CL.X= CAST(CD.X AS VARCHAR(100)) AND CL.Type = 'type1' 
WHERE CL.Type IS NULL 
) 
Select TableName 
Else 

UNION 

else if exists(
SELECT 'abc' AS TableName, 1 FROM table3 CA 
LEFT JOIN database2 CL ON CL.X = CAST(CA.Y AS VARCHAR(100)) AND CL.Type = 'type2' 
WHERE CL.Type IS NULL 
) 
Select TableName 
Else 

union 

more tables with repeating structure 

我對這種SQL還是很新的。當我運行這個程序時,我遇到了錯誤,並不斷改變它,試圖找出它,但現在我在牆上。

+0

所以,你想要的清單,想必在一列dataest的形式,表,這些表有區別?或者只是你遇到的第一張表格(如你的if/else邏輯所暗示的那樣)? –

+0

列出所有有差異的表的列表。 –

回答

1

如果你只需要一個列表,你可以自己維持它在一個表變量,如:

declare @Tables table (TableName varchar(100)); 


if exists(
      SELECT 'xyz' AS TableName, 1 FROM table1CD 
      LEFT JOIN database2 CL ON CL.X= CAST(CD.X AS VARCHAR(100)) AND CL.Type = 'type1' 
      WHERE CL.Type IS NULL 
) 
insert into @Tables 
    select 'Table1' 

if exists(
     SELECT 'abc' AS TableName, 1 FROM table3 CA 
     LEFT JOIN database2 CL ON CL.X = CAST(CA.Y AS VARCHAR(100)) AND CL.Type = 'type2' 
     WHERE CL.Type IS NULL 
) 
insert into @Tables 
    select 'Table3' 



select * from @Tables; 
+0

哦,真棒,這將與更多的聲明?當我有2+時,無法輸出它。哦,我不會要聯盟他們,好的,謝謝這對我來說很有意義 –