Sql 查询数据库中所有500多个表的SELECT语句,以返回值为james或xyz的all字段

Sql 查询数据库中所有500多个表的SELECT语句,以返回值为james或xyz的all字段,sql,sql-server,database,Sql,Sql Server,Database,我想知道是否可以编写一个查询,从数据库的所有表返回值为dcf023的all字段。字段dcf023 n列标题列xyz。这段代码使用列xyz选择所有列,但我需要将其缩小为字段值=dcf023,而不是列 -此代码仅返回列,不返回字段=- 选择列名称、表名称 从信息_SCHEMA.COLUMNS 其中列名称为“%Scolumnxyz%” 谢谢你的帮助。我当然希望这是为了分析,而不是你一直想做的事情。这是我为这类事情准备的脚本。您可能会想稍微修改它以过滤列名,但这应该可以让您开始。这将生成一系列需要复制然

我想知道是否可以编写一个查询,从数据库的所有表返回值为dcf023的all字段。字段dcf023 n列标题列xyz。这段代码使用列xyz选择所有列,但我需要将其缩小为字段值=dcf023,而不是列

-此代码仅返回列,不返回字段=-

选择列名称、表名称

从信息_SCHEMA.COLUMNS

其中列名称为“%Scolumnxyz%”


谢谢你的帮助。

我当然希望这是为了分析,而不是你一直想做的事情。这是我为这类事情准备的脚本。您可能会想稍微修改它以过滤列名,但这应该可以让您开始。这将生成一系列需要复制然后运行的select语句

DECLARE @MySearchCriteria VARCHAR(500)
SET @MySearchCriteria = '''10345''' --you do need all these quotation marks because this string is injected to another string.

SELECT 'if exists(SELECT ' + c.columnlist + '] FROM [' + t.name + '] WHERE ' + w.whereclause + ') SELECT ' + c.columnlist + '] FROM [' + t.name + '] WHERE ' + w.whereclause  as SelectStatement
FROM sys.tables t 
CROSS APPLY (
    SELECT STUFF((    
        SELECT '], [' + c.Name AS [text()]
        FROM sys.columns c
        join sys.types t2 on t2.user_type_id = c.user_type_id
        WHERE t.object_id = c.object_id 
            AND c.collation_name IS NOT NULL
            AND c.max_length > 6
            and t2.name not in ('text', 'ntext')
        FOR XML PATH('') 
    ), 1, 2, '' )
) c (columnlist)
CROSS APPLY (
    SELECT STUFF((    
        SELECT ' OR [' + c.Name + '] IN (' + @MySearchCriteria + ')' AS [text()]
        FROM sys.columns c
        join sys.types t2 on t2.user_type_id = c.user_type_id
        WHERE t.object_id = c.object_id 
            AND c.collation_name IS NOT NULL
            AND c.max_length > 6
            and t2.name not in ('text', 'ntext')
        FOR XML PATH('') 
    ), 1, 4, '' )
) w (whereclause)
where c.columnlist is not null
ORDER BY t.name

谈论标记垃圾邮件……这是哪一个?@Rick:我想他忘了标记为垃圾邮件;你是什么意思?我真的不需要开玩笑。如果你认为这很简单,请给我答案。正如@canon所建议的,你需要通过存储过程在你正在使用的任何RDBMS中使用动态SQL。您已经标记了多个RDBMS,所以这对我们来说是非常有用的。我的意思是,这听起来像是至少运行了工作。但是产生了很多select语句,如何让它只提供结果、列和表,而不是从[AcAccountPointer]中选择[SystemAssignId]、[AccountId]、[CompOperId]、[PrevAcctId]的所有2k+行,其中[SystemAssignId]在'143486000000'中,或[AccountId]在'143486000000'中,或[普雷瓦克提德]在“143486000000”中,您有两种选择。您可以将结果复制并粘贴到新的查询窗口中以运行它们,也可以将其扩展为以动态sql的形式执行这些结果。此类操作只应作为一次性或部分分析来完成。不应定期执行,因为这将是非常复杂的low.it收集了大量空列。是否有办法对其进行优化,使其只产生非空结果?确保只在动态sql部分中的select之前添加一个exists。我将编辑我的答案以向您展示。我担心的是,如果您不能添加该位,您将无法真正理解这一点。请确保您理解这是什么在你使用它之前,先用它。