2016-11-07 9 views
1

それは私がクエリは、SELECTクエリの結果にテーブル名を含めることは可能です

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

を実行している場合は、そのような列名がありません例えば、監査目的の大豆のためのテーブル名を追加することが可能ですTableAのような表にはありますが、どうにかしてそれを問合せに持ってくることはありますか?たとえば、sysテーブルや情報スキーマを使用して、そのようにテーブル名を持たせますか?

また、表Aから表Hのようなテーブルの全部をやっています どうすれば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

ありがとうございますが、テーブルAからテーブル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]に予約されています。更新済みを参照 –

関連する問題