2017-08-03 24 views
0

eImagine這是連接到服務器時的數據庫結構。大多數時候你會有相同的表格,但是數值是不同的。我想查詢數據庫名稱,如果我的表的值之一即Tbl1 ColumnName Col1的值等於'Accepted'。如何查詢DBName,如果表中的列具有某些特定值

DbName1 
     Tbl1    
      Col1 -- 'Accepted' // this are the values col1 holds 
       -- 'Rejected' 
       -- 'In Process' 
       -- 'Awaiting Processing' 
DbName2 
     Tbl1 
      Col1 -- 'NotAccepted' 
       -- 'Rejected' 

DbName3 
     Tb1 
      Col1 -- 'NotAccepted' 
       -- 'Awaiting Processing' 
DbName4 
     Tbl1 
      Col1 -- 'Accepted' 
       -- 'Rejected' 

Expected Result 
DbName1  
DbName4 -- since both DB has Table name Tbl1 whose column Col1 = 'Accepted' 

在我的SQL環境中,我至少有37個數據庫。

非常感謝您的幫助。

+2

我們可以問問,你是如何在這種情況下結束的?我寧願在一個數據庫中有一張表,這些數據庫都用來維護其狀態。然後,只需發出一個簡單的'SELECT'語句即可獲得答案。 –

+0

這是一個生產問題,想象一下每個數據庫都適用於每個客戶端。每個客戶端都具有相同的表結構,只有少數客戶端能夠執行成功的SSIS數據加載,該加載在該表格列中被保存爲「已接受」。由於在生產環境中有很多數據庫,我想找到那些能夠做數據加載並找到那些不能解決問題的人。 – user3920526

回答

0

如果你知道數據庫名和表名,也列名,你可以使用這樣一個UNION解決方案:

SELECT distinct dbname 
    FROM ( 
    select 'DbName1' as dbname, col1 from DbName1.tb1 
    union all 
    select 'DbName2' as dbname, col1 from DbName2.tb1 
    union all 
    select 'DbName3' as dbname, col1 from DbName3.tb1 
    union all 
    select 'DbName4' as dbname, col1 from DbName4.tb1 
    ) dbs 
WHERE dbs.col1 = 'Accepted'; 

雖然該查詢工作,你真的應該考慮有一個更好的標準化數據庫,而不是4(或更多)具有相同的結構和數據。

+0

感謝您的回答,根據我的例子,您是對的,但希望能夠爲所有37個環境做好準備。 – user3920526

+0

有兩種選擇,您可以在聯合中添加剩餘的其他33個數據庫/表,或者創建一個從信息模式中獲取數據並使用這些數據動態查詢表的過程。 –

相關問題