如何在检查多列中任何值的引用时获取表名及其列?

时间:2012-10-01 06:19:54

标签: sql sql-server sql-server-2008 sql-server-2005 sql-server-2008-r2

从团队表中删除任何团队时,我需要检查teamId是否在其他表中可用。为此,我使用以下查询: -

        select  count(TeamId) from 
        ( select TeamId from Project union all 
          select  TeamId from TeamMember union all 
          select  TeamId from Department union all 
          select TeamId from Role   union all 
        ) as Id where TeamId = 1

此查询工作正常,并返回计数。

但现在我需要该表及其列的名称,我发现teamId。

如果有可能请给我正确的解决方案。

提前感谢..

2 个答案:

答案 0 :(得分:1)

 select 'Project' tableName from Project
 where TeamId = 1
 union all 
 select 'TeamMember' from TeamMember
 where TeamId = 1
 union all 
 select 'Department' from Department
 where TeamId = 1
 union all 
 select 'Role' from Role
 where TeamId = 1

我不明白为什么你需要找到它的“列”,因为在所有情况下你都列出了“TeamId”。如果它在不同的表中被命名为不同的东西,那么你可以使用它:

 select 'Project' tableName, 'TeamId' columnName from Project
 where TeamId = 1
 union all 
 select 'TeamMember', 'Member_TeamId' from TeamMember
 where Member_TeamId = 1

最后,如果你想要“行”(记录),你可以将ID添加到列中:

 select 'Project' tableName, ProjectID idInTable from Project
 where TeamId = 1
 union all 
 select 'TeamMember', TeamMemberId from TeamMember
 where TeamId = 1

答案 1 :(得分:1)

select * from 
        ( select 'Project'    as table_name, TeamId from Project    union all 
          select 'TeamMember' as table_name, TeamId from TeamMember union all 
          select 'Department' as table_name, TeamId from Department union all 
          select 'Role'       as table_name, TeamId from Role    
        ) Id 
where TeamId = 1