2016-11-07 44 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]。查看已更新 –

相關問題