【发布时间】:2011-12-09 09:25:03
【问题描述】:
我的目标是从数据库中找到所有具有特定值的给定列的表。 IE。 我有 Table1、Table2、Table3、Table4、Table5、Table6、Table7 等表格。
在这些表中,一些表的列名称为“NameID”。现在我想找出列名为“NameID”且值为 100 的表。
谁能告诉我如何为此编写 SQL 查询?
【问题讨论】:
标签: sql database sql-server-2008
我的目标是从数据库中找到所有具有特定值的给定列的表。 IE。 我有 Table1、Table2、Table3、Table4、Table5、Table6、Table7 等表格。
在这些表中,一些表的列名称为“NameID”。现在我想找出列名为“NameID”且值为 100 的表。
谁能告诉我如何为此编写 SQL 查询?
【问题讨论】:
标签: sql database sql-server-2008
是的,您可以使用 INFORMATION_SCHEMA,它允许 MS SQL 进行自我描述。
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME = 'NameID'
【讨论】:
如果您无法列出表格,我怀疑您是否可以在查询中完成。您需要动态创建一个查询(使用您找到的表,如 Paul Alan Taylor 所示)。
尝试调整这个:
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
...
UNION 会丢弃所有的欺骗,所以如果多行的 id 为 100,那么如果这不是你想要的 UNION ALL,你只会列出一次表。
【讨论】:
需要做类似的事情,对我们来说是 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/
【讨论】: