3

有什么方法可以搜索具有特定值的列,我试图通过数据库中的所有表查找?例如我有

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”表中的“因子”列没有任何与“35”匹配的记录。我怎样才能从返回的结果中消除该表。但我真的更喜欢这样的结果格式,因为我想将此返回用作循环并在循环中执行一些其他操作。

再次感谢!

4

3 回答 3

2

对您的 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 自动运行,但其语法取决于您的平台。或者,将结果复制到您的查询工具中并运行它们,如果足够的话

于 2012-07-24T19:15:11.080 回答
0

select s.name, c.name from sys.columns c inner join sys.tables s on s.object_id = c.object_id where c.name like'%35%'

这将为您提供具有 35 的列和关联的表。

于 2012-07-24T19:23:32.700 回答
0

声明@tableName varchar(100),@colName varchar(100) 声明@sqlStatement nvarchar(100)

为 select s.name 声明 tablelist 游标,c.name from sys.columns c inner join sys.tables s on s.object_id = c.object_id where c.name like'%YourSearchCondtion%' OPEN tablelist FETCH NEXT FROM tablelist into @tableName , @colName

而@@FETCH_STATUS = 0 BEGIN

SELECT @sqlStatement = 'SELECT ' + @colName + ', * FROM ' + @tableName + ' WHERE ' + @colName + ' NOT LIKE ''%35%'''

exec sp_executesql @sqlStatement

-- 在这里你可以得到你不想要的表并添加到临时表中.. PRINT CAST(@@ROWCOUNT AS VARCHAR)

FETCH NEXT FROM tablelist INTO @tableName, @colName END

关闭表列表 DEALLOCATE 表列表 GO

于 2012-07-25T13:11:57.297 回答