2016-11-07 72 views
1

是否有可能,如果我运行一个查询是否有可能在一个SELECT查询结果中包括一个表名

Select TableA, sum(col1), sum(col1), count(*) As rowcount 
from TableA 

增加对审计目的大豆例如表名但是没有这样的列名在表格中作为表格A,但无论如何,它以某种方式将其带入查询中?例如使用sys表或信息模式,并以这种方式带来表名?

此外,我正在做一大堆表格,比如从TableA到TableH 我怎样才能为每个使用TSQL的表执行此操作?

谢谢

+6

肯定。只要将其设为字符串文字即可。 'TableA' –

回答

0

您可以添加一个字符串,一个恰好匹配表名。这需要单引号:

Select 'TableA' as tablename, sum(col1), sum(col1), count(*) As rowcount 
from TableA; 

如果要以更规范的方式执行此操作,则需要动态SQL。

declare @tablename varchar(255); 
set @tablename = 'tableA'; 

declare @sql nvarchar(max); 
set @sql = 'Select '@tablename' as tablename, sum(col1), sum(col1), count(*) As rowcount 
    from @tablename'; 

set @sql = replace(@sql, '@tablename', @tablename); 

exec sp_executesql @sql; 

这是基本代码。你需要一个while循环来遍历你想要的所有表格。

+0

谢谢,但有没有办法做到这一点动态使用TableA的所有表通过表H – abs786123

+0

循环看起来像对不起?从来没有必须使用循环之前 – abs786123

+0

其实我把表中的所有表的名称,SQL将如何循环通过每个记录集? – abs786123

1
-- You can use Select * From INFORMATION_SCHEMA.Tables to table infor 
-- Or just define the targeted tables 
Declare @Tables table (TableName varchar(100)) 
Insert Into @Tables values 
('TableA'), 
('TableB'), 
('TableC'), 
('TableD'), 
('TableE'), 
('TableF'), 
('TableG'), 
('TableH') 

Declare @SQL varchar(max) = '>>>' 
Select @SQL = Replace(@SQL+'Union All'+char(13)+'Select TableName='''+TableName+''',Col1=sum(col1), Col2=sum(col), [RowCount]=count(*) From '+TableName+char(13),'>>>union all','') 
From @Tables 

Exec(@SQL) 

生成的SQL是

Select TableName='TableA',Col1=sum(col1), Col2=sum(col), [RowCount]=count(*) From TableA 
Union All 
Select TableName='TableB',Col1=sum(col1), Col2=sum(col), [RowCount]=count(*) From TableB 
Union All 
Select TableName='TableC',Col1=sum(col1), Col2=sum(col), [RowCount]=count(*) From TableC 
Union All 
Select TableName='TableD',Col1=sum(col1), Col2=sum(col), [RowCount]=count(*) From TableD 
Union All 
Select TableName='TableE',Col1=sum(col1), Col2=sum(col), [RowCount]=count(*) From TableE 
Union All 
Select TableName='TableF',Col1=sum(col1), Col2=sum(col), [RowCount]=count(*) From TableF 
Union All 
Select TableName='TableG',Col1=sum(col1), Col2=sum(col), [RowCount]=count(*) From TableG 
Union All 
Select TableName='TableH',Col1=sum(col1), Col2=sum(col), [RowCount]=count(*) From TableH 
+0

谢谢,但又回来了,错误 - 关键字'RowCount'附近的语法不正确。 – abs786123

+0

@ abs786123对不起RowCount保留改为[RowCount]。查看已更新 –

相关问题