2014-12-07 43 views
1

我正在開發一個tsql項目,並且我注意到現有的代碼使用了我以前從未見過的語法。他們在完全合格的地址的數據庫名稱前放了一個美元符號。在SSDT項目中使用美元符號的完全限定名稱

下面是一個例子:

SELECT c.AccountCode, FROM **[$(SmartAdmin)]**.dbo.Customers c 

enter image description here

如果我重新命名數據庫名稱爲SmartAdmin.dbo.Customers時,Visual Studio會拋出錯誤說 「含有未解決的引用對象」。

它似乎是一個Visual Studio相關的東西,任何人都可以解釋這是什麼和 是否我可以刪除它。

請參閱附件截圖,最後一個來自項目解決方案文件。

enter image description here

enter image description here

+0

對我來說似乎[很無聊](http://stackoverflow.com/q/3551284/11683)。 – GSerg 2014-12-07 22:20:47

+0

那麼,如果我沒有解決這個問題,我的數據庫項目將無法建立,我無法登記。所以,這對我來說並不無聊。謝謝 – 2014-12-07 22:21:55

+2

去sql服務器並執行'選擇*從sys.databases',看看你的數據庫是否真的叫'$(SmartAdmin)'。 – 2014-12-07 22:24:27

回答

4

[$(SmartAdmin)]語法在一個SSDT項目用於引用其他數據庫對象。確切地說,它是SQLCMD語法。

如果你有一個數據庫引用SmartAdmin,並且如果引用設置爲[$(SmartAdmin)]正確引用它,那麼這不是問題。看起來問題是其他兩個[SmartAdmin]的引用。改變它們看起來像[$(SmartAdmin)].dbo.whatever


爲什麼這些引用是有用的示例:我剛剛編輯了一個存儲過程,我在SSDT中拼寫錯誤列名。在幾秒鐘內,列名以紅色下劃線。然後我刪除了依賴於列名的數據庫引用。紅色的下劃線消失了。我添加了數據庫引用,並且該列再次以紅色標出。我更正了列名,紅色下劃線消失了。

沒有數據庫引用,我不得不等待存儲過程被部署或可能執行,才能看到錯誤。通過參考數據庫,我發現編輯中的問題。就像代碼一樣。

+0

嗨,約翰,非常感謝你的解決方案!你知道我應該在Visual Studio中去改變這個參考嗎?我想將它稱爲[SmartAdmin]而不是[$(SmartAdmin)]。謝謝。 – 2014-12-07 23:46:39

+0

你不能那樣改變它。 '[$()]'是語法,而不是命名。如果您不將這些外部引用切換到'[$(x)]'語法,您將失去SSDT中的一些最佳功能。例如,SSDT不會知道'sp。[PerSms]'和'spo。[PerSms]'的數據類型,所以它不能警告你不一致地使用視圖的'PerSms'列。這很醜陋,但一旦你習慣了它,你會看到好處。一旦你建立了項目,開始開啓代碼分析,你會發現你從未想象到的問題。 – 2014-12-08 03:57:08

+0

您也可以通過變量名稱將數據庫引用更改爲NOT引用。編輯你的數據庫引用的屬性來做到這一點,然後引用你通常的方式。 – 2014-12-08 17:07:19

0

在我看來,你的數據庫實際上是所謂$(SmartAdmin)

由於錯誤提示"contains an unresolved reference to an object".這意味着當您更改數據庫名稱SmartAdmin,它不能找到一個數據庫在服務器上使用此名稱。

如果您想更改數據庫名稱,則需要執行以下語句,然後才能在語句中使用該名稱。

USE master; 
GO 

EXEC sp_renamedb '$(SmartAdmin)', 'SmartAdmin'; 
GO 

USE SmartAdmin; --<-- Now you will be able to connect to this database 
GO     -- without the dollar ($) sign. 
+0

Hi M.Ali。非常感謝您的回答。但是,該數據庫名爲SmartAdmin,不含$()。問候, – 2014-12-07 22:35:30

0

此問題與數據庫項目外部數據庫引用有關。當您向數據庫項目添加另一個解決方案時,您可以指定「數據庫變量名稱」,在我的情況下,它是$(SmartAdmin)。

有關更多信息,請參閱此linkenter image description here

謝謝大家回答我的問題。

相關問題