2016-06-22 4 views
1

Ich versuche, einen Weg zu finden, den „Tabellennamen“ als Spalte aus der aktuellen Tabelle in SQL Server 2012Wie kann ich Tabellennamen als Spalte aus der aktuellen Tabelle in SQL Server erhalte

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 

zu erhalten Da ich den Tabellennamen in der ersten Spalte jeder SELECT-Anweisung fest codiere, ergibt das keinen großen Sinn. Kann ich den Tabellennamen in der ersten Spalte dynamisch abrufen?

Schätzen Sie Ihre Gedanken!

RAP

+2

Ich sehe nichts falsch mit Ihrem aktuellen Ansatz - glaube nicht, dass es eine bessere Lösung gibt. – sgeddes

Antwort

0

Was denken Sie über Tabellennamen als Variablen vorbei?
Schauen Sie sich dieses kurze Beispiel an (ich habe nicht versucht, es auszuführen).

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

Dies zeigt Ihnen alle Ihre Feldnamen in allen Ihren Tabellen in Ihrer Datenbank.

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; 
Verwandte Themen