SQL Query用于从具有相同列名的所有列中进行选择

时间:2014-03-20 04:00:12

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

我有多个同名多列的列, table_1Xtable_2x等。 如何在没有union的情况下从所有表中选择X列的查询。如果使用union,我必须在查询语句中写每个表名,我不这样做。我想要这样做:

Select X from (All table with containing X) where X value (not X name) = 'ABC'

我使用的是Microsoft SQL。 可能吗 ?感谢

2 个答案:

答案 0 :(得分:1)

您可以使用动态SQL执行此操作并以这种方式构建查询:

declare @sql as nvarchar(max) = N''
declare @columnname as nvarchar(100) = N'X'
declare @columnvalue as nvarchar(100) = N'ABC'

select @sql = @sql + N' UNION ALL SELECT ' + QUOTENAME(c.name) + N' FROM '
    + QUOTENAME(s.name) + N'.'
    + QUOTENAME(t.name)
    + N' WHERE ' + QUOTENAME(c.name) + N' = ''' + @columnvalue +  ''''
from sys.columns c
inner join sys.tables t on c.object_id = t.object_id
inner join sys.schemas s on t.schema_id = s.schema_id
where c.name = @columnname

set @sql = STUFF(@sql, 1, 10, N'')

exec sp_executesql @sql

答案 1 :(得分:-2)

尝试以下内容对您有用。

   Select a.x,b.x
   from table_name a,table_name1 b
   where a.x = b.x
   and a.x = 'ABC';