我的目標是從數據庫中查找具有特定值的給定列的所有表。 即 我有類似於表1,表2,表3,表4,表5,表6,表7等的表格。如何在包含具有特定值的列的所有表中找到?
在這些表格中,某些表格具有列名'NameID'。現在我想找出列名稱爲'NameID'且值爲100的表格。
任何人都可以告訴我如何爲此編寫SQL查詢嗎?
我的目標是從數據庫中查找具有特定值的給定列的所有表。 即 我有類似於表1,表2,表3,表4,表5,表6,表7等的表格。如何在包含具有特定值的列的所有表中找到?
在這些表格中,某些表格具有列名'NameID'。現在我想找出列名稱爲'NameID'且值爲100的表格。
任何人都可以告訴我如何爲此編寫SQL查詢嗎?
如果您不能列出的表,我懷疑你可以在查詢做到這一點。你需要動態地創建一個查詢(使用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。
是的,你可以使用INFORMATION_SCHEMA,它允許MS SQL自我描述。
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME = 'NameID'
雅那是真實的,但我想有列「填充NameID」其中有100 –
需要做類似的事情,對我們來說,它是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)
你可以用我的搜索腳本使用以下參數:
SET @SearchStrColumnValue = '100' /* use LIKE syntax */
SET @FullRowResult = 1
SET @SearchStrTableName = 'TABLE%' /* NULL for all tables, uses LIKE syntax */
SET @SearchStrColumnName = 'NameID' /* NULL for all columns, uses LIKE syntax */
SET @SearchStrInXML = 0 /* Searching XML data may be slow */
http://fullparam.wordpress.com/2012/09/07/fck-it-i-am-going-to-search-all-tables-all-collumns/
值如果表只需要你想要做的表名從table1中選擇top 1'Table1'其中id = 100 union ... –