2015-03-11 3 views
0

Я преобразовываю модель базы данных в SQLModel, поэтому мы можем начать развертывание с помощью dacpac. Я завершил это с помощью нескольких других баз данных, но ни одна из них не ссылается на внешние базы данных. У меня проблема, когда пара просмотров и хранимых процедур ссылается на таблицы из другой базы данных, находящейся на одном сервере. Для хранимых процедур ошибка не возникает, потому что для процедур не требуется, чтобы таблицы создавали единицу времени выполнения. Но для просмотров я получаю ошибки сборки дляSQL Server Project Просмотр ссылок таблиц из разных баз данных

содержит неразрешенную ссылку на объект. Либо у объекта не существует или ссылка неоднозначна

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

Любая помощь была бы принята с благодарностью.

+0

Существуют ли таблицы, на основе которых существуют представления? TSQL разрешается при его выполнении (поэтому таблицы, перечисленные в хранимой процедуре, не должны существовать во время создания), но таблицы/представления, которые вид основан на том, что должен существовать при создании. –

+0

Они существуют во внешней базе данных в том же экземпляре, что и представление ссылается на таблицу как EXTERNALDB.dbo.TABLE – greektreat

ответ

0

Вам нужно будет создать дополнительные SQL-проекты и импортировать другие dbo для каждой ссылки на внешнюю базу данных. Затем создайте ссылки в своем основном проекте на дополнительные (внешние ref) проекты. Вам, вероятно, придется найти/заменить любые трехуровневые ссылки в вашем основном db (maindb.schema.object -> schema.object), которые также ссылаются на основной db. НАКОНЕЦ, постройте решение, и если оно безошибочно, ваши контрольные ошибки должны проясниться.

Вы можете использовать коды ошибок, сообщаемые (71561, 71501), чтобы найти вокруг, как другие люди разрешили это, но приведенные выше шаги сработали для меня.

+0

Я именно это и планирую делать, если не могу понять это иначе. Я был удивлен, что вокруг этого не обойтись. Я дам вам знать, что я сделал. – greektreat

+0

Если вы найдете что-то, пожалуйста, сделайте - наша архитектура имеет внешние ссылки, представленные во внешних db, поэтому почти у каждого проекта в моем решении есть ссылки! PITA! –

0

Я просто побежал это на два базах данных (локальные и внешней база данных с именем x6 на SQL Server 2012)

create view dbo.view1 
as 

select * from dbo.x5 inner join x6.dbo.t2 
on dbo.x5.i1 = x6.dbo.t2.x1 
; 
go 

create view dbo.view2 
as 

select * from dbo.x5 inner join x6.dbo.t2 
on dbo.x5.i1 = x6.dbo.t2 

View2 не был создан, потому что не относится к колонку, которая была использована, чтобы присоединиться к таблице x5 с сообщением:

Идентификатор из нескольких частей «x6.dbo.t2» не может быть связан. Так что это сработало, когда я был явно о столбцах, используемых для соединения. Также, если в двух таблицах есть дубликаты имен, это может смутить.

Если в обеих таблицах есть столбец с именем state1, и вы выбираете имя1 из ...., если вы получите неоднозначную ошибку ссылки.