繁体   English   中英

如何从SQL Server中的当前表中获取表名作为列

[英]How can I get table name as column from the current table in SQL Server

我正在尝试找到一种方法来将“表名”作为SQL Server 2012中当前表的列

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

您如何将表名作为变量传递?
看一个这个简单的例子(我没试过去运行它)。

    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

这将显示数据库中所有表中的所有字段名称。

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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM