我正在尝试获取表格和列信息。所以我写了两个这样的查询:
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数据库中执行它们时,这两个工作正常,但是当我在不同的数据库中执行它时,它们返回nothig。
我想在不同的数据库中执行它们,所以我该怎么做?
答案 0 :(得分:3)
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'
答案 1 :(得分:2)
如果原因在OBJECT_NAME中,SCHEMA_NAME就像Shark所指出的那样,那么从相应的视图中获取数据而不是调用这些函数可能有所帮助:
select c.* from chag.sys.columns c
join chag.sys.objects o on
c.object_id = o.object_id
where o.name = 'Aduser'
select t.* from chag.sys.tables t
join chag.sys.schemas s on
t.schema_id = s.schema_id
where t.name = 'Aduser' and s.name = 'Tref'
答案 2 :(得分:0)
因为您使用的是Database.Schema.Object
引用。尝试对其他数据库运行:
SELECT * FROM sys.columns c
WHERE OBJECT_NAME(c.object_id)='Aduser'
SELECT * FROM sys.tables so
WHERE so.name = 'Aduser' AND SCHEMA_NAME(so.schema_id) = 'Tref'
请注意,如果没有'Aduser'或'Tref'对象,那么您将无法获得结果。