使用SQL Server获取表的数据库名称

时间:2018-01-18 15:59:21

标签: sql sql-server

我有以下SQL查询,它根据某些搜索条件选择所有列名称;我也想获取数据库名称。我该怎么做?

到目前为止,我无法通过加入完成此操作。我不确定sys.tablessys.databases之间的关系。任何指导都将不胜感激。

SELECT
    c.name  AS 'ColumnName',
    t.name AS 'TableName'
FROM 
    sys.columns c
JOIN 
    sys.tables t ON c.object_id = t.object_id
WHERE 
    c.name LIKE '%Broker%'
ORDER BY 
    TableName, ColumnName;

谢谢。通过在您的指导下使用以下代码,我能够实现我的目标。为了进一步说明,我添加了架构。

SELECT      
    '[' + SCHEMA_NAME(schema_id) + ']' + '.' +  '[' + db_name() + ']' as "Database_Schema_Name",
    t.name AS 'Table_Name',
    c.name  AS 'Column_Name'
FROM        
    sys.columns c
JOIN
    sys.tables t ON c.object_id = t.object_id
WHERE       
    c.name LIKE '%Broker%'
ORDER BY    
    Table_Name, Column_Name

2 个答案:

答案 0 :(得分:1)

在SQL Server中,系统表按数据库存储。因此,所有都在一个数据库中,因此您只需使用dbname()

SELECT db_name() as DatabaseName, c.name AS ColumnName, t.name AS TableName
FROM sys.columns c JOIN
     sys.tables t
     ON c.object_id = t.object_id
WHERE c.name LIKE '%Broker%'
ORDER BY TableName, ColumnName;

注意:由于INFORMATION_SCHEMA表是跨数据库的标准表,因此我更愿意在可用时从这些表中获取元数据信息。这样做的另一个好处是,您只需要INFORMATION_SCHEMA.COLUMNS,因此(明确)不需要JOIN

答案 1 :(得分:0)

您可以使用此

SELECT DB_NAME(3)AS [Database Name];