搜索多个表的字段

时间:2016-01-21 12:46:00

标签: sql sql-server sql-server-2008

我们在此命名约定中有许多临时表:temp_table_20153112。从这些表中,有一个名为Manager的字段。我们想要识别那些Manager IS NULL的表。 以下是我目前列出的所有以temp_table_开头的表但我不知道如何重新查询结果集的内容。有什么想法吗?

SELECT t.name AS table_name,
       c.name AS column_name
FROM sys.tables AS t
INNER JOIN sys.columns c ON t.object_id = c.object_id
WHERE t.name LIKE '%temp_table_%'
    AND c.name = 'Manager'

2 个答案:

答案 0 :(得分:1)

DECLARE @SQL NVARCHAR(MAX)

SELECT @SQL = STUFF((
    SELECT '
UNION ALL
SELECT TOP(1) ''' + name + ''' AS tbl FROM ' + name + ' WHERE Manager IS NULL'
    FROM (
        SELECT name = QUOTENAME(SCHEMA_NAME(o.[schema_id])) + '.' + QUOTENAME(o.name)
        FROM sys.objects o
        JOIN sys.columns c ON o.[object_id] = c.[object_id]
        WHERE o.name LIKE 'temp_table_%'
            AND c.name = 'Manager'
            AND c.is_nullable = 1
    ) t
    FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 13, '')

--PRINT @SQL
EXEC sys.sp_executesql @SQL

输出 -

SELECT TOP(1) '[dbo].[temp_table_2342]' AS tbl FROM [dbo].[temp_table_2342] WHERE Manager IS NULL
UNION ALL
SELECT TOP(1) '[dbo].[temp_table_234]' AS tbl FROM [dbo].[temp_table_234] WHERE Manager IS NULL
UNION ALL
...

答案 1 :(得分:1)

{{1}}