Problembehandlung bei Datenbankprojekten, Erstellung und Bereitstellung

Die folgenden Probleme können beim Erstellen, Ändern und Bereitstellen von Datenbankprojekten auftreten:

  • Fehler bei Datenbankobjekten

  • Verwendung neuer reservierter Wörter in Microsoft SQL Server 2005

  • Unterschiede bei Befehlszeilenbuilds

  • Abhängigkeiten und Aktualisierungsskripts

  • Bezeichner in Anführungszeichen können Probleme beim erneuten Laden von Projekten verursachen

  • Zwischen dem internen Zustand des Datenbankprojekts und seinen Inhalten bestehen Inkonsistenzen

  • Rückgängigmachen ausstehender Änderungen

  • Der Windows NT-Benutzer oder die -Gruppe wurde nicht gefunden

  • Doppelte Objektnamen und ausgeschlossene Dateien

  • Nach Datenbank und Server qualifizierte Namen

  • Leistung der Funktion "Datenbankschema importieren"

  • Buildfehlernavigation

  • Syntaxfehler beim Verwenden von datenbankübergreifenden Verweisen

  • Umbenennen von SQLCLR-Projekten und -Assemblys

  • Nicht unterstützte Syntax für FULLTEXT STOPLIST

  • SORT_IN_TEMPDB-Klausel wird nicht importiert

  • Der Status von Bezeichnern in Anführungszeichen geht verloren, wenn Sie Tabellenwertfunktionen mit mehrere Anweisungen importieren

  • Einige Projektfehler werden nach dem Erstellen des Projekts nicht gelöscht

  • Fehlerhafte Syntax im Skript nach der Bereitstellung

Fehler bei Datenbankobjekten

Wenn ein Datenbankobjekt einen oder mehrere Syntaxfehler enthält, werden die zugehörigen Fehlermeldungen im Fenster Fehlerliste angezeigt.

Tipp

Die im Fenster Fehlerliste angezeigte Fehlermeldung sollte Informationen darüber bereitstellen, wie Sie den Fehler beheben können. Nachdem Sie den Fehler behoben und das Datenbankobjekt gespeichert haben, wird das Symbol für das Datenbankobjekt auf den üblichen Zustand zurückgesetzt, und der Fehler wird aus dem Fenster Fehlerliste entfernt.

Verwendung neuer reservierter Wörter in Microsoft SQL Server 2005

Im Folgenden werden die neuen reservierten Schlüsselwörter in SQL Server 2005 aufgeführt: EXTERNAL, PIVOT, REVERT, TABLESAMPLE und UNPIVOT. Im Ausgabefenster wird ein Fehler angezeigt, wenn Sie diese reservierten Schlüsselwörter als Schemaobjektnamen in einem Datenbankprojekt für Microsoft SQL Server 2005 oder SQL Server 2008 verwenden.

Tipp

Um diese Beschränkung zu umgehen, können Sie die Schemaobjektnamen in Anführungszeichen einschließen. Sie können beispielsweise "CREATE TABLE [External] (c1 INT)" verwenden.

Unterschiede bei Befehlszeilenbuilds

Wenn Sie ein Befehlszeilenbuild ausführen, während das Projekt in Visual Studio geöffnet ist, erhalten Sie möglicherweise nicht alle Buildfehler wie beim Erstellen über die Benutzeroberfläche.

Tipp

Um dieses Problem zu umgehen, schließen Sie das Datenbankprojekt in Visual Studio, bevor Sie einen Befehlszeilenbuild ausführen.

Abhängigkeiten und Aktualisierungsskripts

Um die richtige Reihenfolge von Objekten in einem Aktualisierungsskript zu generieren, werden beim Schemavergleich Objektabhängigkeiten untersucht. Wenn eine Ansicht z. B. von einer Tabelle abhängt, muss die Tabelle vor der Ansicht erstellt werden. Wenn für das Objekt, das von dem zweiten Objekt abhängt, kein schemaqualifizierter Name verwendet wird, wird die Abhängigkeit möglicherweise nicht erkannt, und das Aktualisierungs- oder Erstellungsskript enthält Anweisungen in der falschen Reihenfolge. Dieser Unterschied kann zu Fehlern beim Aktualisieren eines Ziels zum Anpassen an eine Quelle oder beim Bereitstellen von Änderungen in einer Datenbank führen. Dieses Problem tritt auch bei Datenbankbuildskripts auf.

Tipp

Stellen Sie zum Umgehen dieses Problems sicher, dass Sie schemaqualifizierende Namen für die Objekte verwenden, bei denen Abhängigkeiten vorliegen. In Visual Studio Premium und Visual Studio Ultimate können Sie Objektnamen mithilfe der Datenbankumgestaltung vollständig qualifizieren. Weitere Informationen finden Sie unter Vollqualifizierte Namen für Datenbankobjekte. Im folgenden Beispiel können Sie sicherstellen, dass die Abhängigkeit richtig erkannt wird, wenn Sie das Ende der Anweisung so ändern, dass auf "[dbo].[KeysTable]" (und nicht nur auf "KeysTable") verwiesen wird:

CREATE VIEW [NewUser].[ViewReferencingScalarFunction] AS SELECT Column2, dbo.SimpleMultiplyParamByTwo(PK_Column) AS [Function] FROM KeysTable

Bezeichner in Anführungszeichen können Probleme beim erneuten Laden von Projekten verursachen

Beim Speichern von Objekten oder Laden einer Datenbank mit Bezeichnern in Anführungszeichen treten Fehler auf, wenn in den Datenbankeigenschaften das Kontrollkästchen SET QUOTED_IDENTIFIER deaktiviert ist. Diese Situation kann eintreten, wenn Sie ein Datenbankschema aus einer Datenbank importieren, in der Bezeichner in Anführungszeichen verwendet werden.

Tipp

Um dieses Problem zu umgehen, stehen Ihnen zwei Möglichkeiten zur Verfügung. Sie können die Objektdefinitionen ändern, sodass eckige Klammern anstelle von Anführungszeichen verwendet werden. Beispielsweise können Sie "Meine Tabelle" in [Meine Tabelle] ändern. Alternativ können Sie das Menü Projekt öffnen, auf Datenbankprojekt-Eigenschaften und dann auf die Registerkarte Datenbankeigenschaften klicken und das Kontrollkästchen SET QUOTED_IDENTIFIER aktivieren.

Zwischen dem internen Zustand des Datenbankprojekts und seinen Inhalten bestehen Inkonsistenzen

Wenn Sie mit Visual Studio Premium arbeiten, erhalten Sie möglicherweise folgende Fehlermeldung: "Zwischen dem internen Zustand des Datenbankprojekts und seinen Inhalten bestehen Inkonsistenzen. Diese Situation kann eintreten, wenn eine Datei im Projekt fehlt. Entladen Sie das Projekt, und laden Sie es erneut, um das Problem zu beheben." Dieser Fehler gibt an, dass das Projekt, von dem eine Liste der anscheinend enthaltenen Dateien verwaltet wird, nicht mehr mit dem Status der Dateien synchronisiert ist. Die häufigste Ursache für diesen Fehler besteht darin, dass eine der Dateien im Projekt vom Datenträger gelöscht wird, während das Datenbankprojekt geschlossen ist. Dieser Fehler kann auch durch Probleme verursacht werden, die beim Importieren eines Datenbankschemas auftreten.

Tipp

Dieses Problem können Sie umgehen, indem Sie in der Schemaansicht auf Synchronisieren klicken. Wenn sich das Problem dadurch nicht beheben lässt, können Sie das Datenbankprojekt entladen und anschließend erneut laden. Klicken Sie dazu im Projektmappen-Explorer auf das Projekt. Öffnen Sie das Menü Projekt, und klicken Sie auf Projekt entfernen. Nachdem das Projekt entladen wurde, öffnen Sie das Menü Projekt, und klicken Sie auf Projekt erneut laden.

Rückgängigmachen ausstehender Änderungen

Die Schemaansicht wird nicht automatisch aktualisiert, nachdem Sie den Befehl Ausstehende Änderungen rückgängig machen des Versionskontrollsystems verwendet haben. Wenn Sie z. B. eine Tabelle oder Spalte umbenennen und diese Änderungen anschließend rückgängig machen, wird in der Schemaansicht die Meldung "Änderung an einer externen Datei, Neusynchronisierung erforderlich..." angezeigt.

Tipp

Um dieses Problem zu umgehen, müssen Sie auf der Symbolleiste Schemaansicht auf Synchronisieren klicken.

Der Windows NT-Benutzer oder die -Gruppe wurde nicht gefunden

Wenn das Datenbankprojekt auf einen nicht verfügbaren Anmeldenamen verweist, wird die folgende Fehlermeldung angezeigt: "Der Windows NT-Benutzer oder die -Gruppe 'Domänenname\Anmeldename' wurde nicht gefunden. Überprüfen Sie den Namen." Dieses Problem kann auftreten, wenn Sie an einem Computer arbeiten, der sich in einer anderen Domäne als die Datenbank befindet, deren Schema importiert wurde. Diese Situation tritt i. d. R. ein, wenn Sie zu Hause an einem Datenbankprojekt arbeiten, das an einem anderen Standort erstellt wurde. In diesem Fall können Sie das Datenbankprojekt nicht erstellen oder bereitstellen.

Tipp

Sie können den Benutzer erstellen und die FOR LOGIN-Klausel weglassen. So können Sie beispielsweise Folgendes verwenden: CREATE USER [Domain\someLogin]. Wenn Sie das Datenbankprojekt bereitstellen, wird der Benutzer erstellt und der Anmeldung "[Domäne\beliebige Anmeldung]" zugeordnet, das Datenbankprojekt muss jedoch keinen Verweis auf diese Anmeldung enthalten.

Doppelte Objektnamen und ausgeschlossene Dateien

Wenn in einem Datenbankprojekt doppelte Objektnamen vorhanden sind (z. B. zwei Tabellen mit dem Namen Orders), wird im Fenster Fehlerliste ein Fehler angezeigt. Auch wenn Sie das Problem beheben, indem Sie die Datei mit der Definition für eines der Objekte ausschließen, wird die Fehlermeldung nicht sofort ausgeblendet.

Tipp

Um dieses Problem zu umgehen, können Sie auf Aktualisieren klicken oder die Datei bearbeiten, in der sich die Objektdefinition befindet, das Objekt umbenennen und die Datei speichern.

Nach Datenbank und Server qualifizierte Namen

Wenn Sie in Visual Studio Premium ein Objekt erstellen, wird dies nach der Namenskonvention [Schema].[Objekt].[untergeordnetes Objekt] benannt. Wenn Sie auf ein Objekt in einer anderen Datenbank oder auf einem anderen Server verweisen möchten, können Sie den Namen der Datenbank und des Servers wie folgt angeben: [Server].[Datenbank].[Schema].[Objekt].[untergeordnetes Objekt]. Wenn Sie eine gespeicherte Prozedur oder eine Ansicht erstellen, die auf ein Objekt verweist, das einen durch Datenbank qualifizierten oder durch Server qualifizierten Namen erfordert, wird eine Warnung angezeigt.

Tipp

Um diese Warnung aufzulösen, müssen Sie einen datenbankübergreifenden Verweis definieren. Weitere Informationen zu datenbankübergreifenden Verweisen finden Sie unter Verwenden von Verweisen in Datenbankprojekten und unter Gewusst wie: Hinzufügen von Verweisen zu Datenbankprojekten.

Wichtig

Die Bereitstellung schlägt fehl, wenn das Projekt ungelöste Warnungen zu nach Datenbank oder Server qualifizierten Namen enthält und Sie auf der Registerkarte Erstellen der Datenbankprojekteigenschaften das Kontrollkästchen Warnungen als Fehler behandeln aktivieren. Dieser Fehler tritt auf, weil durch nach Datenbank oder Server qualifizierte Namen Warnungen generiert werden. Wenn Sie durch Datenbank qualifizierte oder durch Server qualifizierte Namen verwenden, müssen das Kontrollkästchen Warnungen als Fehler behandeln deaktivieren.

Leistung der Funktion "Datenbankschema importieren"

Der Import eines Datenbankschemas dauert beträchtlich länger, wenn das Fenster Testlisten-Editor oder Testansicht geöffnet ist. Dies gilt für den Assistenten für neue Datenbankprojekte (wenn Sie ein Datenbankschema importieren), aber auch für die Funktion "Datenbankschema importieren". Das Problem tritt selbst dann auf, wenn Sie die Fenster Testlisten-Editor und Testansicht schließen, bevor Sie das Datenbankschema importieren.

Tipp

Um dieses Problem zu umgehen, müssen Sie die Fenster Testlisten-Editor und Testansicht schließen, Visual Studio beenden und neu starten und anschließend das Datenbankschema importieren. Bei kleineren Schemas müssen Sie diese Schritte möglicherweise nicht ausführen. Bei der Beispieldatenbank AdventureWorks dauerte der Schemaimport 27 Sekunden bei geschlossenem Fenster Testlisten-Editor und 48 Sekunden bei geöffnetem Fenster Testlisten-Editor.

Buildfehlernavigation

Wenn die Bereitstellung fehlschlägt, können Sie den Fehler nicht korrigieren, indem Sie das generierte Buildskript aktualisieren. Sie müssen die Quelldatei korrigieren, mit der dieses Buildskript generiert wird. Wenn Sie im Fenster Fehlerliste auf einen Bereitstellungsfehler doppelklicken, wird das Buildskript im Editor mit der Zeile angezeigt, die den Fehler verursacht hat.

Tipp

Um dieses Problem zu umgehen, müssen Sie das Buildskript anzeigen, um die Fehlerursache zu bestimmen, und dann die Quelldatei im Datenbankprojekt ändern, die den Fehler enthält. Beispiel: Wenn das nach der Bereitstellung auszuführende Skript "Script.PostDeployment.sql" einen Fehler enthält, müssen Sie anstelle des Buildskripts das Skript "Script.PostDeployment.sql" ändern.

Syntaxfehler beim Verwenden von datenbankübergreifenden Verweisen

Sie können einen oder mehrere Syntaxfehler empfangen, wenn Sie eine Objektdefinition speichern, die einen Verweis auf ein Objekt in einer anderen Datenbank enthält. Sie können z. B. einen Verweis zum Datenbankprojekt hinzufügen, Variablen mit den Namen RefServer und RefDatabase hinzufügen und ihnen Werte zuweisen. Dann können Sie wie folgt eine Ansicht definieren:

CREATE VIEW [dbo].[MyView]
AS
SELECT * FROM $(RefServer).$(RefDatabase).dbo.TableName

Beim Speichern dieser Definition erhalten Sie möglicherweise eine oder mehrere Fehlermeldungen, die auf falsche Syntax hinweisen. Die Fehlermeldungen können auf den Namen der Datenbank für die Entwurfszeitvalidierung verweisen, was verwirrend sein kann.

Tipp

Zum Beheben dieses Problems müssen Sie die Variablennamen in Klammern setzen. Ändern Sie dieses Beispiel wie folgt, um es zu korrigieren:

CREATE VIEW [dbo].[MyView]
AS
SELECT * FROM [$(RefServer)].[$(RefDatabase)].dbo.TableName

Umbenennen von SQLCLR-Projekten und -Assemblys

Wenn Sie eine SQLCLR-Projekt oder eine entsprechende Assembly umbenennen, den Verweis jedoch nicht aktualisieren, können Sie kein Datenbankprojekt bereitstellen, das einen Verweis auf ein dieses Projekt oder diese Assembly enthält.

Tipp

Um dieses Problem zu beheben, entfernen Sie den alten Verweis, und fügen Sie einen Verweis auf das SQLCLR-Projekt oder die Assembly mit dem aktualisierten Namen hinzu.

Nicht unterstützte Syntax für FULLTEXT STOPLIST

Visual Studio Premium modelliert nicht die optionale Syntax FROM { [Datenbankname.] Quellstopplistenname } | SYSTEM STOPLIST ] für die CREATE FULLTEXT STOPLIST-Anweisung. Wenn Sie ein Objekt importieren, das diese Syntax verwendet, wird diese Syntax ignoriert.

Tipp

Um dieses Problem zu beheben, müssen Sie dem Skript nach der Bereitstellung manuell Stoppwörter hinzufügen. Weitere Informationen finden Sie unter Gewusst wie: Angeben von Skripts vor der Bereitstellung und Skripts nach der Bereitstellung.

SORT_IN_TEMPDB-Klausel wird nicht importiert

Visual Studio Premium kann die SORT_IN_TEMPDB-Klausel für Indizes nicht importieren. Wenn Ihr Code beispielsweise folgendermaßen lautet:

CREATE TABLE [dbo].[IndexTable]
{
[Column1] [INT] NOT NULL
}
GO
CREATE NONCLUSTERED INDEX [SortInTempDbOn] ON [dbo].[IndexTable]
{
[Column1] ASC
} 
WITH (SORT_IN_TEMPDB = ON)
GO

Der Index wird ohne die SORT_IN_TEMPDB-Klausel importiert.

Tipp

Zum Beheben dieses Problems müssen Sie die Indexdefinition stets manuell korrigieren, wenn Sie Änderungen aus der Datenbank in das Projekt importieren.

Der Status von Bezeichnern in Anführungszeichen geht verloren, wenn Sie Tabellenwertfunktionen mit mehrere Anweisungen importieren

Sie können Tabellenwertfunktionen mit mehreren Anweisungen importieren, jedoch wird der Status der Bezeichnerzeichenfolge in Anführungszeichen nicht in SQL Server gespeichert. Beim Importieren dieser Funktionen können Fehler auftreten, da die Standardeinstellung für Bezeichner in Anführungszeichen ON ist.

Tipp

Zum Beheben dieses Problems müssen Sie die Einstellung Bezeichner in Anführungszeichen für alle Tabellenwertfunktionen mit mehreren Anweisungen ändern, nachdem Sie Objekte und Einstellungen importiert oder Updates aus der Datenbank in das Projekt geschrieben haben.

Einige Projektfehler werden nach dem erneuten Erstellen des Projekts nicht gelöscht

Einige Fehler, die im Datenbankprojekt auftreten können, sind auch bei Neuerstellung des Projekts nicht behoben, nachdem Sie die Ursache des Fehlers korrigiert haben. Wenn Sie z. B. in Windows-Explorer die SQLPERMISSIONS-Datei löschen, auf die im Projekt verwiesen wird, tritt wie erwartet ein Fehler auf. Wenn Sie die Datei im Projektmappen-Explorer aus dem Projekt entfernen und dann erneut erstellen, bleibt der Fehler bestehen, obwohl Sie ihn korrigiert haben.

Tipp

Zum Beheben dieses Problems müssen Sie im Projektmappen-Explorer auf der Symbolleiste auf Projekt erneut analysieren klicken.

Fehlerhafte Syntax im Skript nach der Bereitstellung

Standardmäßig ist der SQLCMD-Modus im Transact-SQL-Editor in Visual Studio 2010 deaktiviert. Diese Änderung wurde vorgenommen, da IntelliSense nicht aktiv ist, wenn der SQLCMD-Modus aktiviert wird. Bei der Bereitstellung wird ggf. der folgende Fehler angezeigt, wenn das Skript nach der Bereitstellung Anweisungen enthält.

Incorrect syntax near ':'. C:\MySandbox\MySolution\MyProject\Scripts\Post-Deployment\Script.PostDeployment.sql

Tipp

Um dieses Problem zu beheben, müssen Sie den SQLCMD-Modus aktivieren. Klicken Sie zum Aktivieren des SQLCMD-Modus auf der Symbolleiste Transact-SQL-Editor auf SQLCMD-Modus.

Siehe auch

Aufgaben

Gewusst wie: Ändern von Datenbankobjekten

Gewusst wie: Vergleichen und Synchronisieren der Daten von zwei Datenbanken

Konzepte

Umbenennen aller Verweise auf ein Datenbankobjekt

Umbenennen aller Verweise auf ein Datenbankobjekt

Änderungsprotokoll

Datum

Versionsgeschichte

Grund

Juli 2010

Eintrag hinzugefügt, um Benutzer auf eine Änderung im Standardverhalten in Visual Studio 2010 hinzuweisen, der Probleme beim Skript nach der Bereitstellung verursachen könnte.

Kundenfeedback.