2010-03-22 53 views
12

如何在鏈接服務器數據庫上創建視圖。例如,我在[5.6.7.8]上有一個關聯的服務器[1.2.3.4]。這兩個數據庫服務器都是SQL Sserver 2005.我想在鏈接服務器上使用表在[5.6.7.8]上創建View。在SQL Server中使用鏈接服務器數據庫創建視圖

編輯:

使用全名,[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周圍沒有括號,但是我給了它,錯誤時這些括號被刪除。

謝謝。

linkedserver.database.schema.table 

所以,如果您的鏈接服務器名稱爲[0.0.0.0],你可以引用:

+0

請發佈完整(或更多)的視圖創建腳本,以及用於訪問視圖的代碼。 – 2010-03-22 16:51:37

+0

555.555.555.555不是有效的IP地址。每個數字最多可以是255,並且需要是有效的IP地址。例如,您應該可以ping通IP地址:ping 10.1.16.1。通常使用服務器名稱而不是IP地址更有意義。 – Ryan 2010-03-23 09:01:43

+1

感謝您的回覆。 555.555.555.555不是我使用的IP。我故意改變了這一點。 – Kashif 2010-03-24 08:07:26

回答

16

您需要使用四個部分限定名稱: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地址。

+0

感謝您的回覆。請看我的編輯。 – Kashif 2010-03-22 16:36:18

2

如果鏈接的服務器設置,您可以使用四部分限定名稱只是引用它的表表:

[0.0.0.0].database.schema.table 
+0

感謝您的回覆。請看我的編輯。 – Kashif 2010-03-22 16:32:15

0

您也可以只需將來自鏈接服務器表/視圖對象拖放到你的觀點和管理工作室會爲你創建的四個部分參考。

+0

在管理工作室中將定義的鏈接服務器拖放到我的視圖中不起作用 - 界面(Management Studio 2008)不允許我拖放。也許有鏈接服務器中的設置阻止了這一點? – 2012-01-17 15:00:53

0

您需要定義一個鏈接服務器,然後才能訪問它,因爲鏈接服務器條目還包含身份驗證信息。

創建鏈接的服務器後,您可以使用點符號servername.database訪問其數據庫及其對象。[所有人] .object

10

它是一個SQL Management Studio中問題。 如果您嘗試使用management studio NEW VIEW創建視圖,那麼您將得到錯誤不正確的語法。

但是如果你使用SQL查詢:

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

那麼它會工作。

要測試您將看到刷新視圖時創建的視圖。 如果您只是從視圖中選擇查詢,您將看到視圖返回結果。

但是,如果您嘗試進入該視圖的設計模式並嘗試執行設計查詢,即使視圖已成功創建,錯誤也會再次彈出。

+0

非常感謝。我的鏈接服務器的名稱中有一個連字符,它引發了Management Studio 2005.您的解決方案可以解決此問題。 – 2012-11-15 10:40:19

+0

這是我遇到的問題。我給「未解決的對象」警告太重要了。感謝菲爾。 – Vic 2013-10-14 15:28:27

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

+0

只要您將地址放在方括號中,IP就可以正常工作。 – influent 2013-06-13 19:29:43

+0

好點,謝謝。 – 2013-06-14 16:23:01

+0

這是一個很好的解決方案,可以在您的DNS無法正確解析名稱時創建具有別名的de鏈接服務器。 – EAmez 2017-05-08 11:26:59

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個部分。
已枉過於尋找解決辦法。
可以工作的腳本發佈在上面的鏈接中。

相關問題