SQL Server完全限​​定名称中的列名称

时间:2018-02-08 15:42:45

标签: sql sql-server fully-qualified-naming

我在SQL Server documentation中读到我可以在简单的SELECT查询的FROM子句中指定列名。 但是当我尝试运行此查询时:

select * from my_db.dbo.test_table.test;

我收到以下错误:

  

Msg 7202,Level 11,State 2,Line 1无法找到服务器'my_db'   sys.servers。验证是否指定了正确的服务器名称。如果   必要时,执行存储过程sp_addlinkedserver来添加   server to sys.servers。

我知道这是一个T-SQL页面,我正在尝试运行。

为什么会这样?

我也通过Microsoft SQL Server Management Studio 2017版使用SQL Server 2017版。

3 个答案:

答案 0 :(得分:2)

您不能在FROM子句中指定列,但可以在SELECT子句中指定列。

select test from my_db.dbo.test_table

答案 1 :(得分:2)

尝试从此

重写
select * from my_db.dbo.test_table.test;

到这个

select test_table.test,* from my_db.dbo.test_table;

用多个句点编写它的方式它假设你正在尝试完全限定表,所以在你尝试服务器的时候将其处理如下

my db = linked server (a server other than the Server you are working on)
dbo = Schema (which is correct)
test_table = Table (Also correct)
test = just plain erroror

您要显示的字段应直接关注关键字选择,如果您只想要2个字段,则可以编写

select test,test2 from my_db.dbo.test_table;

如果您只有一台服务器,则更简单

select test,test2 from dbo.test_table;

或者如果您只有defailt Schema dbo(数据库基础所有者)

select test,test2 from test_table;

我希望发誓

答案 2 :(得分:0)

请运行sp_addlinkedserversp_addlinkedsrvlogin SP:

EXEC sp_addlinkedserver @server='MyLinkedServer'
EXEC sp_addlinkedsrvlogin 'MyLinkedServer', 'false', NULL, 'MyUserName', 'MyPassword'

之后,您可以尝试运行:select * from my_db.dbo.test_table

参考:https://jsfiddle.net/oqL56h5q/3/

此外,即使SQL Server 2014相关可能有帮助,请参阅:https://blog.sqlauthority.com/2014/08/26/sql-server-fix-error-7202-could-not-find-server-in-sys-servers-verify-that-the-correct-server-name-was-specified/