Ссылка на базу данных в проекте SSDT с UDF и представлениями
Встать в странную проблему. Предполагая, что в одном пустом решении есть два проекта базы данных, Барт и Гомер. Барт был добавлен в качестве ссылки на базу данных для Гомера.
Барт проект определяет функцию:
CREATE FUNCTION [dbo].[Message]()
RETURNS NVARCHAR(255)
AS
BEGIN
RETURN 'I am a value returned from another database'
END
Затем проект Гомера определяет таблицу:
CREATE TABLE [dbo].[Messages]
(
[Id] INT NOT NULL PRIMARY KEY
)
и вид:
CREATE VIEW [dbo].[MessagesV]
AS SELECT Id, Bart.dbo.Message() AS [Message]
FROM dbo.Messages
При попытке собрать я получаю следующие ошибки:
Error 2 SQL71501: Computed Column: [dbo].[MessagesV].[Message]
contains an unresolved reference to an object. Either the object does
not exist or the reference is ambiguous because it could refer to any
of the following objects: [Bart].[dbo].[Message] or
[dbo].[Messages].[Bart]::[dbo].[Message].
Error 1 SQL71501: View: [dbo].[MessagesV] contains an unresolved
reference to an object. Either the object does not exist or the reference
is ambiguous because it could refer to any of the following objects:
[Bart].[dbo].[Message] or [dbo].[Messages].[Bart]::[dbo].[Message].
Как правильно ссылаться на UDF Bart в представлении?
1 ответ
Когда вы добавляете ссылку на базу данных, по умолчанию она устанавливает переменную базы данных для использования в ваших скриптах TSQL. Это позволяет вашему проекту ориентироваться на несколько сред, в которых ссылочная БД может иметь другое имя.
Правильное использование с учетом этого значения по умолчанию будет:
CREATE VIEW [dbo].[MessagesV]
AS SELECT Id, [$(Bart)].dbo.Message() AS [Message]
FROM dbo.Messages
Я подтвердил, что это работает для фрагмента кода, который вы отправили. Обратите внимание, что если вы хотите использовать имя базы данных напрямую, вы можете просто удалить значение переменной базы данных при добавлении ссылки. Тогда Bart.dbo.Message() будет работать, как и ожидалось.
Ниже показано диалоговое окно "Добавить ссылку на базу данных" с показом соответствующей переменной базы данных и примера использования. Вы увидите изменение использования в зависимости от того, есть ли какой-либо текст в текстовом поле переменной базы данных.