16

如何在链接服务器数据库上创建视图。例如,我在 [5.6.7.8] 上有一个链接服务器 [1.2.3.4]。两个数据库服务器都是 SQL Sserver 2005。我想使用链接服务器上的表在 [5.6.7.8] 上创建视图。

编辑:

在使用全名 [1.2.3.4].db.dbo.table 创建时,我收到此错误。

SQL 执行错误。

执行的 SQL 语句:SELECT * FROM 1.2.3.4.db.dbo.table (您可以看到括号不存在。) 错误来源:.Net SqlClient 数据提供程序错误消息:“0.0”附近的语法不正确。---> IP 地址的一部分。

我只是在 ManagementStudio 中创建它,而不是使用它,因为它尚未创建。我已经改变了IP。在图像中,您可以看到 IP 周围没有括号,但我给出了它,并且错误地删除了这些括号。

谢谢。

4

7 回答 7

24

您需要使用四部分限定名称:linkedserver.database.schema.table

SELECT * FROM [1.2.3.4].Northwind.dbo.Customers

这是一篇关于访问对象名称的 MSDN 文章。

您可能想尝试手动创建视图,而不是使用 SQL 管理工具:

CREATE VIEW [dbo].[sywx]
AS
    SELECT  *
    FROM    [1.2.3.4].Atia.dbo.IpPbxDCR
GO

如果可能,我还建议您为链接服务器使用名称,而不是使用 IP 地址。

于 2010-03-22T16:23:43.057 回答
13

它是一个 SQL Management Studio 问题。如果您尝试使用管理工作室 NEW VIEW 创建视图,则会收到错误语法错误。

但是如果你使用 SQL 查询:

CREATE VIEW [dbo].[viewname] 
AS 
    SELECT  * 
    FROM    [0.0.0.0].database.dbo.table 
GO 

那么它将起作用。

要进行测试,您将看到刷新视图时创建的视图。如果您只是从视图中进行选择查询,您将看到视图返回结果。

但是,如果您尝试进入该视图的设计模式并尝试执行设计查询,即使视图已成功创建,错误也会再次弹出。

于 2012-05-29T09:21:02.497 回答
2

如果设置了链接服务器,您只需使用四部分限定名称引用其上的表:

linkedserver.database.schema.table

因此,如果您的链接服务器名称为 [0.0.0.0],您可以将表引用为:

[0.0.0.0].database.schema.table
于 2010-03-22T16:19:28.027 回答
2

您的主要问题是用数字(IP 地址)命名您的链接服务器。对我有用的唯一方法是为我的链接服务器使用字母名称,不带任何点“。” 您可以使用这些代码行来添加您的链接服务器和身份验证:

    EXEC sp_addlinkedserver   
        @server='TEST_LINK', 
        @srvproduct='',
        @provider='SQLNCLI', 
        @datasrc='tcp:0.0.0.0'

    EXEC sp_addlinkedsrvlogin
        @useself='FALSE',
        @rmtsrvname='TEST_LINK',
        @rmtuser='user',
        @rmtpassword='secret'

你可以在这里找到原始答案

于 2012-08-24T20:18:56.423 回答
1

对于使用句点作为 Web 服务名称的链接服务器 - 这将不起作用。
差异的代码细节和步骤发布在:
http
://www.access-programmers.co.uk/forums/showthread.php?t=260764例如 FROM [V2.EGG.COM]..[NAT_DBA].[NV_WELLS]
在 SSMS 2008 中,[V2.EGG.COM].. 周围的方括号被编辑器删除。然后更新失败,因为它超过 4 个部分。
徒劳地寻找解决方法。
有效的脚本发布在上面的链接中。

于 2014-02-12T15:23:21.140 回答
0

您也可以将表/视图对象从链接服务器拖放到您的视图中,Management Studio 将为您创建四部分参考。

于 2010-03-22T16:28:37.193 回答
0

您需要先定义一个链接服务器,然后才能访问它,因为链接服务器条目还包含身份验证详细信息。

创建链接服务器后,您可以使用点符号 servername.database.[owner].object 访问其数据库及其对象

于 2010-03-23T09:25:03.220 回答