这里指定的解决方案,工作原理如下(我从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')
如果我也想查询不同的服务器,通用方法是什么?上面的查询是动态生成的,所以我希望它们在任何服务器和数据库上工作
注意:blahdbname
和blahtablename
都存在于server1
和server2
中。server1
和server2
是链接的
这是因为您正在使用函数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'