sql - 获取对象信息

标签 sql sql-server t-sql sql-server-2008

我正在尝试获取表和列信息。所以我写了两个这样的查询:

SELECT * FROM Chag.sys.columns c
WHERE OBJECT_NAME(c.object_id)='Aduser'

SELECT * FROM Chag.sys.tables so
WHERE so.name = 'Aduser' AND SCHEMA_NAME(so.schema_id) = 'Tref'

当我在 Chag 数据库中执行它们时,这两个工作正常,但是当我在不同的数据库中执行它们时,它们不返回任何内容。

我想在不同的数据库中执行它们,那么我该怎么做?

最佳答案

OBJECT_NAME()函数接受数据库 ID 的附加参数。至于SCHEMA_NAME() ,您可能应该将其替换为 OBJECT_SCHEMA_NAME() ,它相当于 SCHEMA_NAME(),只是它使用对象 ID 而不是架构 ID,并且也接受数据库 ID 作为第二个(可选)参数。

您可以使用DB_ID()获取指定数据库的ID。

以下是您的陈述的修改版本:

SELECT *
FROM Chag.sys.columns c
WHERE OBJECT_NAME(c.object_id, DB_ID('Chag'))='Aduser'

SELECT *
FROM Chag.sys.tables so
WHERE so.name = 'Aduser'
  AND OBJECT_SCHEMA_NAME(so.object_id, DB_ID('Chag')) = 'Tref'

关于sql - 获取对象信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7809371/

相关文章:

sql-server - 在 SQL Server 中将 char(8) 更改为 char(32)

mysql - 将 MySQL 链接到 MSSQL 错误

sql-server - T-SQL (Azure),如何查看多个值是否在一个集合中

sql - 将 Like 语句与波斯语单词一起使用

c++ - EXEC SQL EXECUTE INTO 什么都不返回

mysql - SQL查询: how to group items correctly?

sql - MS SQL Server 零填充

sql - 计算由特定列分区的先前时间范围内的行

sql-server - Smalldatetime 的 Cast() 失败时的默认值

sql - 使用 UPDATE FROM 批量设置字段