2011-12-09 55 views
3

我的目標是從數據庫中查找具有特定值的給定列的所有表。 即 我有類似於表1,表2,表3,表4,表5,表6,表7等的表格。如何在包含具有特定值的列的所有表中找到?

在這些表格中,某些表格具有列名'NameID'。現在我想找出列名稱爲'NameID'且值爲100的表格。

任何人都可以告訴我如何爲此編寫SQL查詢嗎?

回答

0

如果您不能列出的表,我懷疑你可以在查詢做到這一點。你需要動態地創建一個查詢(使用Paul Alan發現的表格)。

嘗試適應這一點:

http://ubercode.bleakllc.com/2008/11/find-any-value-in-any-database-column.html

如果你已經知道所有具有列的表和表的該名單是不是隨時更改,那麼你可以做一個簡單的查詢像

Select 'Table1' from table1 where id = 100 
    UNION 
    Select 'Table2' from table2 where id = 100 
    UNION 
    ... 

聯盟將扔掉所有的受騙者,所以如果多行具有ID爲100,你只能得到一次列出的表,如果這不是你想要的UNION ALL。

+0

值如果表只需要你想要做的表名從table1中選擇top 1'Table1'其中id = 100 union ... –

1

是的,你可以使用INFORMATION_SCHEMA,它允許MS SQL自我描述。

SELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME = 'NameID' 
+1

雅那是真實的,但我想有列「填充NameID」其中有100 –

0

需要做類似的事情,對我們來說,它是TransactionID。我採取了Paul Alan Taylor和MakeMinePanacea的建議並添加了一個遊標。它快速和骯髒,但工作1關閉。

DECLARE @TableName varchar(MAX) 
DECLARE @Sql VARCHAR(MAX) 
set @Sql = '' 
DECLARE @Tables CURSOR 

SET @Tables = CURSOR FOR 

    SELECT t.Table_Name 
    FROM INFORMATION_SCHEMA.COLUMNS c 
    JOIN INFORMATION_SCHEMA.TABLES t on c.Table_Name = t.Table_Name 
    WHERE COLUMN_NAME = 'TransactionID' and table_type = 'BASE TABLE' 

OPEN @Tables 
FETCH NEXT 
FROM @Tables INTO @TableName 

WHILE @@FETCH_STATUS = 0 
BEGIN 
    if len(@Sql) > 0 
    BEGIN 
     set @SQL = @SQL + ' UNION ALL ' 
    END 

    set @Sql = @Sql + 'SELECT ''' + @TableName + ''' FROM [' + @TableName + '] WHERE transactionid = 100' 

    FETCH NEXT 
    FROM @Tables INTO @TableName 
END 
CLOSE @Tables 
DEALLOCATE @Tables 

exec (@Sql) 
相關問題