2010-08-23 17 views
6

Ich erstellte ein neues SQL Server-Datenbankprojekt innerhalb von VS 2010, importierte die Datenbankobjekte und -einstellungen aus einer lokalen Datenbank mit dem Namen "managers" und erhielt den folgenden Fehler beim Versuch, das Projekt zu erstellen:VS 2010 Datenbankprojekt - SQL03006 Fehler

SQL03006: Ansicht: [dbo]. [Vw_mlFunds] hat einen nicht aufgelösten Verweis auf Objekt [Manager]. [Dbo]. [Mlfunds].

Ich weiß nicht, warum diese Ansicht eine Tabellenreferenz vollständig qualifiziert, um den tatsächlichen Datenbanknamen einzuschließen, und ich würde es vorziehen, die sql nicht zu ändern, wie es jemand anderes Code und es technisch nicht falsch ist. Aber ich denke, dass das vollständige Qualifizieren des Tabellennamens mit dem Namen der Datenbank den VS-Compiler verwirrt, da er [dbo]. [Mlfunds], nicht [managers]. [Dbo]. [Mlfunds] erwartet. Wie kann dieses Problem am besten gelöst werden? Kann ich irgendwo eine neue Datenbanknamenvariable/einen Aliasnamen einrichten? Oder muss ich das sql umgestalten/modifizieren, um es zu kompilieren? Danke im Voraus.

Antwort

5

Eigentlich sieht es so aus, als müsste der Code geändert werden, da dies nicht unterstützt wird. Antwort in diesem Beitrag nicht gefunden:

Using local 3-part names in programmability objects

+0

Wenn Sie diese Verbindung herstellen und nicht erkennen können, warum Ihre Vergleichsskripts immer noch bombardieren, müssen Sie die Option "SQLCMD-Variablen" im ersten Bildschirm "Quell-/Zielschema auswählen" festlegen. – chprpipr

1

Sie müssen ein anderes Datenbankprojekt für die Datenbank [managers] erstellen und Ihr Projekt das andere Projekt "referenzieren". Sie können dies als einfachen Reverse-Engineer-Schritt in der [managers] -Datenbank ausführen, der alle Objekte in dieser Datenbank in ein neues VSDB-Projekt importiert. Siehe Using References in Database Projects.

+0

aufgelöst wurden Könnten Sie mich klarstellen das? Ich bin verwirrt über die Notwendigkeit einer Referenz, wenn beide Objekte (die Basistabelle und die Ansicht) in derselben [managers] -Datenbank gespeichert sind. –

+1

Ich dachte [verwaltet] ist eine andere Datenbank. Wenn die Ansicht den Tabellennamen explizit mit dem Datenbanknamen qualifiziert, dann ist die Ansichtsdefinition technisch * inkorrekt *, da das Projekt unter einem anderen DB-Namen bereitgestellt werden kann, und sogar nach der Bereitstellung kann es wiederhergestellt/kopiert/angehängt/gespeichert werden Eine Vielzahl von Namen und die Ansicht wären in all diesen Szenarien ungültig. –

+0

Ich denke, dass die vollständige Qualifizierung der Tabelle mit dem Datenbanknamen seitens des ursprünglichen Entwicklers unbeabsichtigt war, und möglicherweise ändern wir das Ansichtsskript, um den Datenbanknamensverweis zu entfernen, aber das Erstellungsskript für die Ansicht wird unverändert ausgeführt Fehler in ssms und, wenn sie gegen die manager-Datenbank ausgeführt werden, erkennt sie den ausdrücklichen Bezug auf Manager als sich selbst an. Ich stimme zu, dass dies ein schlampiger Code ist, aber ich versuchte, mich im Moment nicht damit zu befassen, da es Tests erfordern wird. Deshalb habe ich versucht herauszufinden, ob es einen Weg gibt. –

2

ich die gleichen Fehler nach der Erstellung eines Projekts und ein DB zu importieren. Das Problem für mich war, dass der FROM-Tabellenverweis den vollständig qualifizierten Namen enthielt, aber die ausgewählten Felder nicht; wie folgt

SELEC l.UserID, l.Email, m.DOB, ... 
FROM ***[DBName].dbo***.Layout as l 
LEFT OUTER JOIN masterUs as m 

ich den vollständig qualifizierten Verweis geändert durch die DBName und DBO Teil zu entfernen und alle Fehler

SELECT l.UserID, l.Email, m.DOB, .... 
FROM Layout as l 
LEFT OUTER JOIN masterUs as m