我有以下SQL查询,它根据某些搜索条件选择所有列名称;我也想获取数据库名称。我该怎么做?
到目前为止,我无法通过加入完成此操作。我不确定sys.tables
和sys.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
答案 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];