Sql 在特定数据库的表中搜索具有特定值的列名

Sql 在特定数据库的表中搜索具有特定值的列名,sql,database-schema,Sql,Database Schema,是否有任何方法可以通过数据库中的所有表搜索具有特定值的列? 比如我有 SELECT t.name AS table_name, SCHEMA_NAME(schema_id) AS schema_name, c.name AS column_name FROM sys.tables AS t INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID WHERE c.name LIKE '%VersionID%' ORDER BY schema_na

是否有任何方法可以通过数据库中的所有表搜索具有特定值的列? 比如我有

SELECT t.name AS table_name,
SCHEMA_NAME(schema_id) AS schema_name,
c.name AS column_name
FROM sys.tables AS t
INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID
WHERE c.name LIKE '%VersionID%'
ORDER BY schema_name, table_name; 
我在搜索中找到的。它为我提供了versionID列存在的表名,但是如何搜索以返回该列的值为35的表名呢

提前感谢,

很抱歉,也许我的要求不清楚。也许这不能在SQL中实现,因为我在研究中没有发现任何东西。但让我澄清一下

运行此脚本

SELECT t.name AS table_name,
SCHEMA_NAME(schema_id) AS schema_name,
c.name AS column_name
FROM sys.tables AS t
INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID
WHERE c.name LIKE '%factor%'
--and table_name in (Select name from sysobjects where ratingVersionID = 35)
ORDER BY schema_name, table_name; 
将返回此信息,例如:

但也就是说,AutoAge_factor表中的factor列没有任何与35匹配的记录。如何避免该表返回结果。但是我真的希望结果的格式是这样的,因为我希望使用这个返回作为循环,并在循环中做一些其他的事情


再次感谢

对sql的修改将生成更多可以运行的sql

SELECT 
    'select '''+SCHEMA_NAME(schema_id) +'.'+t.name + ''', '+c.name + ' from ' 
      + SCHEMA_NAME(schema_id) +'.' + t.name
      + ' where ' + c.name + ' = 35'

FROM sys.tables AS t 
INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID 
WHERE c.name LIKE '%ID%' 
ORDER BY schema_name(schema_id), t.name
如果需要,您可以使SQL自动运行,但其语法取决于您的平台。或者,将结果复制到您的查询工具中并运行它们(如果这样就足够了)

从sys.columns c internal join sys.tables s中选择s.name、c.name 在s.object\u id=c.object\u id上,其中c.name类似于“%35%”

这将为您提供包含35的列和关联的表

声明@tableName varchar100,@colName varchar100声明 @sqlStatement nvarchar100

为从sys.columns中选择s.name、c.name声明tablelist游标 s.object\u id=c.object\u id上的c内部联接sys.tables s,其中c.name 像“%YourSearchCondition%”一样打开表列表从表列表中获取下一个 进入@tableName,@colName

当@@FETCH\u STATUS=0开始时

选择@sqlStatement='从'+@tableName'中选择'+@colName+',* +'其中'+@colName+'与%35%不同'

exec sp_executesql@sqlStatement

-在这里,您可以得到您不想要的表,并将其添加到临时表中。。打印CAST@@ROWCOUNT为VARCHAR

从tablelist中提取下一个到@tableName,@colName END

关闭表格列表取消分配表格列表转到


你的SQl工作得很好!您知道结果的格式是否可以与我提供的SQL相同吗?这里只列出表名……基本上,我打算循环那些具有该值的versionID的表,并最终插入一些内容。再次感谢!这将输出新的查询,我知道运行这些查询的唯一方法是使用游标,是否可以在一个查询中不使用游标,如果我只想得到列x=y的所有表名?我正在寻找一个脚本,该脚本将返回具有该versionID的表,并且versionID列的值为35。您的脚本只返回列为35的表:我想这是您所期望的。可能不准确,但我希望你能调整一下