2014-12-07 2 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

+0

Ну, если я не решу эту проблему, мой проект базы данных не будет построен, и я не могу зарегистрироваться. Поэтому мне это не скучно. Спасибо –

+2

перейдите на sql-сервер и выполните 'Select * From sys.databases' и посмотрите, действительно ли ваша база данных называется' $ (SmartAdmin) '. –

ответ

4

Синтаксис [$(SmartAdmin)] используется в SSDT проекта для ссылки на объекты в других базах данных. Если быть точным, это синтаксис SQLCMD.

Если у вас есть ссылка на базу данных SmartAdmin, и если ссылка настроена так, что [$(SmartAdmin)] правильно ссылается на нее, то это не проблема. Похоже, проблема в том, что другие два ссылки на [SmartAdmin]. Измените их, чтобы они выглядели как [$(SmartAdmin)].dbo.whatever.


Пример того, почему эти ссылки полезны: я просто редактировал хранимую процедуру я имел в SSDT на орфографическую ошибку имя столбца. В течение нескольких секунд название столбца было подчеркнуто красным. Затем я удалил ссылку на базу данных, от которой зависит имя столбца. Красное подчеркивание ушло. Я добавил ссылку базы данных назад, и столбец был снова выделен красным цветом. Я исправил имя столбца, и красное подчеркивание ушло.

Без ссылки на базу данных мне пришлось бы ждать, пока хранимая процедура не будет развернута или, возможно, выполнена, чтобы увидеть эту ошибку. С ссылкой на базу данных я узнал о проблеме в редакторе. Как код.

+0

Привет, Джон, большое спасибо за решение! Знаете ли вы, где я должен пойти в Visual Studio, чтобы изменить эту ссылку. Я хотел бы просто назвать его как [SmartAdmin] вместо [$ (SmartAdmin)]. Спасибо. –

+0

Вы не можете изменить его таким образом. '[$()]' Является синтаксисом, а не именованием. Если вы не переключите эти внешние ссылки на синтаксис '[$ (x)]', вы потеряете одни из лучших функций в SSDT. Например, SSDT не будет знать типы данных 'sp. [PerSms]' и 'spo. [PerSms]', поэтому он не сможет предупредить вас о непоследовательном использовании столбца PerSms для представления , Это уродливо, но как только вы привыкнете к этому, вы увидите преимущества. После того, как вы создадите проекты, начните анализ кода, и вы увидите проблемы, о которых вы никогда не думали. –

+0

Вы также можете изменить ссылку базы данных на NOT reference через имя переменной. Отредактируйте свойства своей базы данных, чтобы сделать это, а затем укажите, как обычно. –

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 без $(). С уважением, –

0

Эта проблема относится к базам данных внешних ссылок базы данных. Когда вы добавляете другое решение в проект базы данных, вы можете указать «Имя переменной базы данных», в моем случае это $ (SmartAdmin).

Для получения дополнительной информации см. Это link.enter image description here

Спасибо всем за ответ на мой вопрос.