有什么方法可以搜索具有特定值的列,我试图通过数据库中的所有表找到它? 例如,我有
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”匹配的记录。如何消除该表返回结果。但我真的更喜欢这种结果的格式,因为我想将这个返回作为一个循环并在循环中做一些其他的东西。
再次感谢!
答案 0 :(得分: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,但其语法取决于您的平台。或者,将结果复制到查询工具中并运行它们,如果满足
答案 1 :(得分:0)
从sys.columns c inner join sys.tables s中选择s.name,c.name 在s.object_id = c.object_id,其中c.name喜欢'%35%'
这将为您提供35和相关表格的列。
答案 2 :(得分:0)
声明@tableName varchar(100),@ colName varchar(100)声明 @sqlStatement nvarchar(100)
为sys.columns中的select s.name,c.name声明tablelist游标 c。在s.object_id = c.object_id中的内连接sys.tables,其中c.name 比如'%YourSearchCondtion%'OPEN tablelist FETCH NEXT FROM tablelist 到@tableName,@ colName
而@@ FETCH_STATUS = 0 BEGIN
SELECT @sqlStatement ='SELECT'+ @colName +',* FROM'+ @tableName +'在哪里'+ @colName +'不喜欢''%35%'''
exec sp_executesql @sqlStatement
- 在这里你可以获得你不想要的表并添加到临时表中.. PRINT CAST(@@ ROWCOUNT AS VARCHAR)
FETCH NEXT FROM tablelist INTO @tableName,@ colName END
CLOSE tablelist DEALLOCATE tablelist GO