舊有MS Database匯入成SQL Project,並解決產生Link Server問題

之前有提到我們可以利用SQL Project對DB程式進行的版控,但是,今日要針對已存在DB Server內的資料庫,要怎樣也一併納入版控呢?

其實,要將既有的DB納入SQL Project做程式的版控,其實很簡單,只要幾個步驟就可以

  1. 先建立一個空白的SQL Project專案
  2. 在專案按下右鍵做DB的匯入,因為是要對已經存在的資料庫來做版控,所以,選擇匯入資料庫
  3. 設定資料庫的連線資訊

如果你要完全複製資料庫,就在資料夾結構中,選擇結構描述和物件類型,選完就等它匯入囉

匯入的時間要看你的資料庫本身的複雜程度,而這裡發生一個問題,就是專案上會出現紅色的~~~,這表示專案中的程式碼有問題,如果不管它,是會編譯不過


錯誤就是在View內有遇到物件無法進行參考,在檢查View的程式碼,發現在View內有使用OpenQuery語法,造成物件無法參考

1
2
SELECT *
FROM OPENQUERY(XXX,'SELECT * FROM table')

因為,資料庫匯入時候,並不會把Link Server的設定資訊匯入,而造成專案錯誤,要解決這方法,可以在專案中建立一個叫做LinkServer資料夾

  • 使用SSMS找到你資料庫所需要用到的Link Server設定

  • 以上面那一段敘述為例,Link Server的Server是XXX,找到那一台XXX的物件,查看它的建立XXX的SQL語法

    1
    EXEC sp_addlinkedserver @server = N'XXX', @srvproduct=N'cc', @provider=N'MSDASQL', @datasrc=N'cc'
    • @srvproduct: 這是要當做連結伺服器加入的 OLE DB 資料來源產品名稱。 如果是 SQL Server,則不必指定 provider_name、data_source、location、provider_string 和 catalog。

    • @provider: 這是對應於這個資料來源之 OLE DB 提供者的唯一程式化識別碼 (PROGID)。 provider_name 對於安裝在目前電腦上的指定 OLE DB 提供者來說,必須是唯一的。 但是,如果省略 provider_name,就使用 SQLNCLI。 (使用 SQLNCLI 和 SQL Server 將會重新導向最新版的 SQL Server Native Client OLE DB 提供者)。OLE DB 提供者必須向登錄中指定的 PROGID 註冊。

    • @datasrc: 這是資料來源的名稱,如 OLE DB 提供者所解譯。 data_source 是 nvarchar(4000)。 data_source 會當做 DBPROP_INIT_DATASOURCE 屬性來傳遞,以初始化 OLE DB 提供者。

  • LinkServer資料夾內,新增一個.SQL檔案

  • 選擇組建

  • 把上面建立Link Server SQL語法貼上,就會發現原本是紅色蚯蚓的線,就這樣消失了

這樣就大功告成,可以開始撰寫後續程式,要編譯也不會出現問題了