2010-08-23 81 views
6

我在VS 2010中創建了一個新的SQL Server數據庫項目,從名爲「managers」的本地數據庫導入數據庫對象和設置,並在嘗試構建項目時收到以下錯誤:VS 2010數據庫項目 - SQL03006錯誤

SQL03006:查看:[dbo]。[vw_mlFunds]有一個未解析的對象[managers]的引用。[dbo]。[mlfunds]。

我不知道爲什麼這個視圖完全限定一個表引用來包含實際的數據庫名稱,我寧願不必更改SQL,因爲它的別人的代碼,它在技術上是不正確的。但我認爲完全限定表名以包含數據庫的名稱會讓VS編譯器感到困惑,因爲它期望[dbo]。[mlfunds],而不是[managers]。[dbo]。[mlfunds]。如何最好地解決這個問題?我可以在某處設置新的數據庫名稱變量/別名嗎?或者我將不得不重構/修改SQL來讓它編譯?提前致謝。

回答

5

實際上,它看起來像代碼將不得不被修改,因爲這不被支持。答案在這篇文章中發現:

Using local 3-part names in programmability objects

+0

如果你勾起這個並且不能確定你的比較腳本仍然在轟炸的原因,請確保在初始的「Select Source/Target Schema」屏幕中設置「SQLCMD Variables」選項。 – chprpipr 2010-11-18 22:54:52

1

您需要爲[managers]數據庫創建另一個數據庫項目,並讓項目「引用」爲另一個項目。你可以在[managers]數據庫上做一個簡單的反向工程步驟,將數據庫中的所有對象導入到一個新的VSDB項目中。見Using References in Database Projects

+0

你能澄清這對我修改的完全合格的參考?當兩個對象(基表和視圖)都駐留在同一個[managers]數據庫中時,我很需要引用。 – 2010-08-23 21:29:31

+1

我認爲[託管]是一個不同的數據庫。如果視圖顯式限定了表名和數據庫名,那麼視圖定義在技術上是不正確的*,因爲項目可以用不同的數據庫名稱部署,甚至部署後它可以恢復/複製/附加/快照在所有這些情況下,各種名稱和視圖都是無效的。 – 2010-08-23 22:13:25

+0

我認爲完全限定表的數據庫名稱是原始開發人員無意的,我們最終可能會修改視圖腳本以刪除數據庫名稱引用,但視圖的創建腳本將按原樣運行在ssms中出現錯誤,並且在對管理人員數據庫運行時,它會識別對經理的明確引用。我同意這是草率的代碼,但暫時不要惹它,因爲它需要測試。這就是爲什麼我試圖找出是否有解決方法。 – 2010-08-25 14:05:41

2

我創建一個項目,並導入DB後,得到同樣的錯誤。我的問題是FROM表引用包含完全限定的名稱,但所選字段沒有;如下

SELEC l.UserID, l.Email, m.DOB, ... 
FROM ***[DBName].dbo***.Layout as l 
LEFT OUTER JOIN masterUs as m 

我通過移除數據庫名和DBO部分和所有錯誤都解決

SELECT l.UserID, l.Email, m.DOB, .... 
FROM Layout as l 
LEFT OUTER JOIN masterUs as m 
相關問題