使用来自不同数据库和服务器的 sys.columns



这里指定的解决方案,工作原理如下(我从server1运行(

select * from server1.blahdbname.sys.columns c 
where c.[object_id] = OBJECT_ID('blahdbname.dbo.blahtablename')

没事。按预期工作。但是下面的查询不起作用(更改了服务器名称((返回空集(

select * from server2.blahdbname.sys.columns c 
where c.[object_id] = OBJECT_ID('blahdbname.dbo.blahtablename')

如果我也想查询不同的服务器,通用方法是什么?上面的查询是动态生成的,所以我希望它们在任何服务器和数据库上工作

注意blahdbnameblahtablename都存在于server1server2中。server1server2是链接的

这是因为您正在使用函数OBJECT_ID。这将针对当前数据库运行,而不是针对远程数据库运行。

相反,您应该使用远程服务器上的系统视图来实现此目的。

select c.* 
from server1.blahdbname.sys.columns c 
join server1.blahdbname.sys.tables t on c.object_id = c.object_id
where t.name = 'blahtablename'

最新更新