1

I have an existing SQL Server 2014 database and I want to add it to source control (SSDT in Visual Studio 2017).

I have a database project with lot's of views and stored procedures. MyDatabase is current database.

Every view and stored procedure is written in the following way:

create view MyView 
as
    select
        Id
    from MyDatabase..MyTable

".." means the default schema name here (dbo). And it works in SQL Server. But SSDT considers such a construct as an error:

View MyView has an unresolved reference to MyDatabase.dbo.MyTable.

So SSDT knows perfectly well, that database is MyDatabase and skipped schema name is dbo.

But I can't build my project with such errors. I can't also rewrite MyDatabase..MyTable to MyDatabase.dbo.MyTable.

So is there any way to solve this problem SSDT?

marc_s
  • 732,580
  • 175
  • 1,330
  • 1,459
Alex Sham
  • 489
  • 7
  • 14

1 Answers1

2

The 3-part name could be replaced as [$(DatabaseName)]..MyTable:

select Id from MyDatabase..MyTable
=>
select Id from [$(DatabaseName)]..MyTable

Using local 3-part names in programmability objects

While VSTS:DB does not support local 3 part names it does support the use of variables and literals to resolve references to external databases. The $(DatabaseName) variable is an ambient variable that will have its value replaced at the time of deployment. This variable gets its value from the project properties deployment tab. Since $(DatabaseName) is always replaced at deployment with the target database name and references through variables are resolved you may use a variable in your local 3-part names.

Our guidance is to not use local 3-part names as it introduces an unnecessary layer of abstraction and dependency on the database name

Lukasz Szozda
  • 162,964
  • 23
  • 234
  • 275