2016-06-22 4 views
1

私はSQL Serverで現在のテーブルから列として「テーブル名」を取得する方法を見つけようとしている2012は、どのように私は、SQL Serverの現在のテーブルから列としてテーブル名を取得することができます

SELECT 
    'School1.dbo.Person', Age, COUNT(Age) 
FROM 
    School1.dbo.Person 
GROUP BY 
    Age 

UNION ALL 

SELECT 
    'School2.dbo.Person', Age, COUNT(Age) 
FROM 
    School2.dbo.Person 
GROUP BY 
    Age 

私は各select文の最初の列にテーブル名をハードコーディングしているので、あまり意味がありません。最初の列にテーブル名を動的に得る方法はありますか?

あなたの考えを気に入ってください!

RAP

+2

あなたの現在のアプローチには何も間違いはありません。良い解決策はないと思います。 – sgeddes

答えて

0

あなたが変数としてテーブル名を渡すことについてどう思いますか?
この簡単な例を見てください(私はそれを実行しようとしませんでした)。

declare @tableName1 varchar(max) = 'School1.dbo.Person'; 
    declare @tableName2 varchar(max) = 'School2.dbo.Person'; 

    declare @sql1 nvarchar(max) = N'SELECT ''' + @tableName1 + ''', Age, COUNT(Age) FROM ' + @tableName1 + ' GROUP BY Age'; 
    declare @sql2 nvarchar(max) = N'SELECT ''' + @tableName2 + ''', Age, COUNT(Age) FROM ' + @tableName2 + ' GROUP BY Age'; 

    declare @table1 as table(tabName varchar(max), Age int, AgeCount int); 
    declare @table2 as table(tabName varchar(max), Age int, AgeCount int); 

    insert into @table1 execute sp_executesql @sql1; 
    insert into @table2 execute sp_executesql @sql2; 

    select * from @table1 
    union all 
    select * from @table2
0

これは、データベース内のすべてのテーブルのすべてのフィールド名を表示します。

USE your_DB 
GO 
SELECT t.name AS table_name, 
SCHEMA_NAME(schema_id) AS schema_name, 
c.name AS column_name 
FROM sys.tables AS t 
INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID 
WHERE c.name LIKE '%ticker%' 
ORDER BY schema_name, table_name; 
関連する問題