代码之家  ›  专栏  ›  技术社区  ›  Bill Paetzke

如何引用名称中带有反斜杠(\)的sql server?

  •  12
  • Bill Paetzke  · 技术社区  · 15 年前

    • DevServerA
    • DevServerB\2K5

    问题:

    开发服务器 ?

    我尝试了一个示例,虚拟查询(从 开发服务器 ):

    SELECT TOP 1 *  
    FROM DevServerB\2K5.master.sys.tables
    

    我得到一个错误:

    Msg 102, Level 15, State 1, Line 2
    Incorrect syntax near '\.'.
    

    但是,我知道我的语法几乎是正确的,因为另一种方法是有效的(从 开发服务器B\2K5

    SELECT TOP 1 *  
    FROM DevServerA.master.sys.tables
    

    请帮我弄清楚如何参考 开发服务器B\2K5 开发服务器

    3 回复  |  直到 15 年前
        1
  •  21
  •   Remus Rusanu    15 年前

    在4部分名称中,第一部分是链接服务器的名称(即元数据对象),而不是服务器的名称(即主机名)。因此,您可以将链接服务器命名为FOO,并让他指向主机栏或实例FOO\BAR。即使将链接的服务器对象命名为包含斜杠,也可以在多部分名称中使用它,只需引用名称:

    SELECT TOP 1 *  
    FROM [DevServerB\2K5].master.sys.tables
    
        2
  •  6
  •   David    15 年前

    SELECT TOP 1 *  
    FROM [DevServerB\2K5].master.sys.tables
    
        3
  •  0
  •   Alan Robertson    15 年前

    在SQL SERVER 2005上,发生了以下情况: 输入:

    SELECT TOP 1 *   
    FROM [DevServerB\2K5].master.sys.tables 
    

    已更改为

    SELECT TOP 1 *   
    FROM DevServerB\2K5.master.sys.tables 
    

    “.”附近的语法不正确。

    我用两种不同的方式命名了一个链接服务器: “[DevServerB\2K5]”和“DevServerB\2K5”

    谢谢艾伦·罗伯逊

    第二天,更正补充道:我有一部分错了。当您尝试使用SQL语句创建视图时,例如:

    SELECT  *
    FROM [DevServerB\2K5].TestDB.dbo.tables 
    

    但是,如果只使用相同的SQL字符串编写查询,那么它就可以正常工作。

    INSERT INTO [DevServerB\2K5].TestDB.dbo.tables ( ... ) ...
    

    我可以做我想做的,但是如果我可以保存一个视图并使用一个视图来选择、插入和更新[DevServerB\2K5].TestDB数据库中的表,那就更好了