10

Ich habe ein SQL Server-Datenbankprojekt in Visual Studio 2013 erstellt und einen DACPAC aus einer Produktionsdatenbank importiert. Als ich versuchte, das Projekt zu erstellen, erhalte ich Hunderte von Fehlern SQL71501 und SQL71561 (beide sind "unaufgelöster Verweis auf ein Objekt"). Bei der Untersuchung der Skripts besteht das Problem darin, dass viele Ansichten und gespeicherte Prozeduren drei Teilenamen verwenden: [Datenbank]. [Schema]. [Objekt].Nicht aufgelöste Verweise auf dieselbe Datenbank Projekt

Es scheint, dass Visual Studio 2013 diesen Fehler immer dann ausgibt, wenn es auf einen dreiteiligen Namen trifft, der die vom Datenbankprojekt dargestellte Datenbank enthält. Beispiel: Wenn das Datenbankprojekt die Datenbank "MyDatabase" darstellt und ein SQL-Skript in diesem Projekt etwas wie SELECT t.Column1 FROM MyDatabase.dbo.MyTable t enthält, löst VS 2013 entweder SQL71501 oder SQL71561 aus, wenn ich das Projekt erstelle.

Gibt es eine Möglichkeit, unaufgelöste Referenzfehler zu unterdrücken, die nur für die aktuelle Datenbank gelten? Ich möchte weiterhin, dass Visual Studio Fehler für nicht aufgelöste Verweise auf externe Datenbanken auslöst.

EDIT, Korrektur: Ursprünglich wurde der Fehlercode SQL71501 angegeben. Es scheint jedoch, dass Visual Studio sowohl SQL71501- als auch SQL71561-Fehler für nicht aufgelöste Verweise auf dieselbe Datenbank auslöst.

+0

Ich frage mich auch darüber. Ich habe etwas gefunden, das zu funktionieren scheint, aber dann habe ich alle möglichen Buildfehler bekommen. Der einzige Erfolg, den ich hatte, ist das Entfernen der 3-teiligen Benennung von allen Prozeduren, Ansichten und Funktionen für dieselbe Datenbank. Es ist relativ einfach zu finden, wenn Sie auf Dateien vom Typ * .sql beschränken und den Schemanamen einschließen, aber es scheint, dass es einen besseren Weg geben sollte. –

+0

@PeterSchott: Ich habe eine vorherige Stackoverflow-Post gefunden, die das Entfernen von 3 Teilenamen zu bestätigen scheint, ist die einzige Lösung: http://stackoverflow.com/questions/19153996/ssdt-unresolved-reference-error-sql71561. Die Frage enthält einen Link zu einem alten MSDN-Blog, der zu bestätigen scheint, dass wir keine 3-teiligen Namen in SSDT-Datenbankprojekten verwenden können. Die einzige Möglichkeit besteht darin, den Datenbanknamen an einer beliebigen Stelle zu entfernen. (Ich bemerke auch, dass die Links im Antwortpunkt auf das verweisen, was ich als Ihren Blog betrachte!) Dieser MSDN-Blogpost ist 5 Jahre alt und ich bin enttäuscht, dass er dieses Problem in nachfolgenden Versionen nicht behoben hat. –

+0

Nun, wie ich schon sagte, ich hatte _partial_ Erfolg. Es sah großartig aus, bis ich baute und fand, dass viele andere Sachen jetzt Fehler schmeißen. Ich stimme zu, dass es enttäuschend ist. –

Antwort

6

Nun, eigentlich gibt es zwei Problemumgehungen. Meine persönliche Meinung ist, dass es einen Fehler in SSDT bezüglich 3-teiliger Objektnamen in der aktuellen Datenbank gibt.

  1. Erstellen Sie Ihren Projekt-Snapshot (Dacpac) und verweisen Sie ihn als Datenbankreferenz. Denken Sie daran, das Datenbankvariablenfeld im Dialogfeld "Datenbankreferenz hinzufügen" zu löschen.
    Es funktioniert aber dieser Ansatz wird von Microsoft nicht empfohlen und andere Probleme verursachen können: https://connect.microsoft.com/SQLServer/feedbackdetail/view/1047094/post-deployment-script-is-not-generated-in-the-publish-script

  2. Auf Ihren Code ersetzen mit [$ (Database)] .dbo.MyTable alle Vorkommen von MyDatabase.dbo.MyTable
    https://social.msdn.microsoft.com/Forums/sqlserver/en-US/1863d960-d32d-4920-9a30-13dc86c6f857/sql71562-unresolved-reference-to-object-followd-by-database-name-in-the-same-project?forum=ssdt&prof=required

+0

Ich akzeptiere Ihre Problemumgehung (mit [$ (DatabaseName)] als Datenbankname in den Skripts) als Antwort. Ich habe es ausprobiert, es funktioniert, und es scheint weniger problematisch als die Verwendung des Dacpac als Datenbankreferenz. Prost. –

+1

Es konnte mir nicht helfen, einen Dacpac zu Azure zu implementieren. Ich habe meine eigenen Fehler zu lösen, ich kann keine Zeit verlieren, um Microsofts Bugs zu lösen – MatanCo

+0

Ich habe ein Datenbankprojekt geerbt und es gibt die Umgehung für [$ (DatabaseName)] und Ich bekomme immer noch SQL71561 warum? – KillerSnail

1

In Visual Studio:

1) Öffnen Sie SQL Objekt-Explorer verknüpfen Sie Ihre Datenbank serv er, klicken Sie rechts auf ungelöste Referenzdatenbank und "Anwendungsdaten Tier Extract"

enter image description here

2) einen Dateipfad ein. Normalerweise verwende ich \ Dokumente \ SQL Server Management Studio \ DAC Packages \ und klicken Sie auf OK

3) für die Extraktion Warten

4) Rechtsklick auf das Projekt Verweise und Datenbank hinzufügen Referenz

enter image description here

5) Dann ersetzen Referenzen in Ihren Funktionen, SP, .. mit [$ (YourDB)] Präfix