在SQL Server中使用链接服务器数据库创建视图

时间:2010-03-22 16:17:59

标签: sql sql-server-2005 linked-server

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

修改

在使用全名创建[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周围没有括号,但我给出了它,如果错误,这些括号将被删除。

感谢。

7 个答案:

答案 0 :(得分:20)

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

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

以下是关于accessing object names的MSDN文章。

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

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

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

答案 1 :(得分:12)

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

但是如果你使用SQL Query:

CREATE VIEW [dbo].[viewname] 
AS 
    SELECT  * 
    FROM    [0.0.0.0].database.dbo.table 
GO 
然后它会起作用。

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

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

答案 2 :(得分:2)

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

linkedserver.database.schema.table

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

[0.0.0.0].database.schema.table

答案 3 :(得分: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'

您可以找到原始答案here

答案 4 :(得分: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个部分 徒劳无功地寻找解决办法 有效的脚本发布在上面的链接中。

答案 5 :(得分:0)

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

答案 6 :(得分:0)

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

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