Share via


Verwenden von Verweisen in Datenbankprojekten

Sie können mehrere Typen von Verweisen in Datenbankprojekten hinzufügen, um unterschiedlichen Situationen gerecht zu werden. Die Prozeduren, die Sie verwenden, variieren für unterschiedliche Typen von Verweisen geringfügig.

In der folgenden Tabelle werden die Typen von Verweisen gezeigt, die Sie hinzufügen können, sowie die Situationen, für die die einzelnen Typen jeweils geeignet sind.

Verweistyp

Grund für die Verwendung

Ein Datenbankprojekt (.dbproj) in der aktuellen Projektmappe

Diesen Verweistyp fügen Sie hinzu, um mehrere Szenarios zu ermöglichen.

  • Sie können auf ein Datenbankobjekt in einem Projekt aus einem anderen Projekt verweisen, indem Sie den Verweis hinzufügen und eine Variable für den Namen des Servers (optional) und eine Variable für den Namen der Datenbank definieren, die das Objekt enthält. Sie verwenden diese datenbankübergreifenden Verweise, wenn die Datenbank auf Objekte in anderen Datenbanken verweist. Weitere Informationen finden Sie unter Teamentwicklung von Datenbanken mit Verweisen auf andere Datenbanken.

Wenn Sie einen Verweis auf ein anderes Projekt hinzufügen, aber keine Variablen definieren, erstellen Sie ein zusammengesetztes Projekt. Wenn Sie diesen Typ von Projekt bereitstellen, stellen Sie auch die Objekte in anderen Projekten bereit. Weitere Informationen finden Sie weiter unten in diesem Thema in Erstellen von zusammengesetzten Projekten mit Verweisen.

Die Ausgabe eines Datenbankprojekts (DBSCHEMA-Datei) aus der aktuellen Projektmappe oder einer anderen Projektmappe

Wenn Sie auf Objekte in einer anderen Datenbank verweisen müssen, diese Datenbank aber von anderen Entwicklern isolieren möchten, fügen Sie einen Verweis auf eine Datenbankschemadatei hinzu. Diesen Ansatz können Sie verwenden, um Änderungen zu verhindern oder weil Sie die Datenbank nicht aktualisieren können. Sie können z. B. einen Verweis auf eine DBSCHEMA-Datei hinzufügen, wenn das Datenbankprojekt auf Anmeldungen oder Schlüssel verweisen muss, die auf dem Server freigegeben und definiert werden, aber von mehreren Datenbankprojekten verwendet werden. Weitere Informationen finden Sie unter Teamentwicklung von Datenbanken, die auf freigegebene Serverobjekte verweisen.

Möglicherweise möchten Sie auf eine DBSCHEMA-Datei verweisen, die die Definitionen für die Serverobjekte enthält, und nicht die Einstellungen auf dem Server überprüfen, wenn Sie das Datenbankprojekt bereitstellen. Für dieses Szenario können Sie einen Verweis auf die Datei master.dbschema hinzufügen und ein Literal für die Datenbankvariable definieren, deren Wert "Master" ist. Hierdurch können Ihre in der "Master"-Datenbank definierten Verweise auf Objekte ohne Fehler aufgelöst werden. Weitere Informationen zu Literalen finden Sie weiter unten in diesem Thema in Verweisen mit Literalen auf eine Datenbank.

Eine Datei master.dbschema, die Definitionen von Systemobjekten enthält

Wenn Sie auf Systemobjekte wie gespeicherte Systemprozeduren, Systemtabellen, Systemansichten oder Systemkataloge verweisen möchten, müssen Sie einen Verweis auf die entsprechende Datei master.dbschema hinzufügen, um diese Verweise aufzulösen. Möglicherweise möchten Sie z. B. auf sys.sysobjects in einer gespeicherten Prozedur verweisen. Mit Visual Studio Premium wird eine Datei master.dbschema für jede unterstützte Version von SQL Server bereitgestellt. Die DBSCHEMA-Dateien finden Sie in [Programme\Microsoft Visual Studio 10.0\VSTSDB\Extensions\SqlServer\Version\DBSchemas, wobei Version die Version von SQL Server ist, die Sie verwenden (z. B. 2005 oder 2008).

Für dieses Szenario können Sie einen Verweis auf die entsprechende Datei master.dbschema hinzufügen und ein Literal für die Datenbankvariable definieren, deren Wert "Master" ist. Hierdurch können Ihre in der "Master"-Datenbank definierten Verweise auf Objekte ohne Fehler aufgelöst werden. Weitere Informationen zu Literalen finden Sie weiter unten in diesem Thema in Verweisen mit Literalen auf eine Datenbank.

Ein SQL Common Language Runtime (CLR)-Projekt in der aktuellen Projektmappe

Sie verweisen in der aktuellen Projektmappe auf ein SQLCLR-Projekt, wenn Sie ein oder mehrere SQLCLR-Objekte entwickeln, die Sie mit dem Datenbankprojekt bereitstellen möchten. Wenn Sie das Datenbankprojekt bereitstellen, stellen Sie auch die Assembly bereit, die von dem SQLCRL-Projekt erstellt wird, auf das Sie verweisen. Die CREATE ASSEMBLY-Anweisung wird aus den Eigenschaften erstellt, die Sie für diesen Verweis angeben. Weitere Informationen finden Sie weiter unten in diesem Thema unter Teamentwicklung von Datenbanken mit SQLCLR-Objektverweisen und Verwenden von datenbankübergreifenden Verweisen.

Eine SQLCLR-Assembly aus einem Projekt in der aktuellen Projektmappe oder aus einer anderen Quelle

Sie fügen einen Verweis auf eine SQLCLR-Assembly hinzu, wenn das Datenbankprojekt auf Objekte verweisen muss, die in dieser Assembly definiert werden, die aber nicht gleichzeitig oder von demselben Team entwickelt werden. Wenn Sie das Datenbankprojekt bereitstellen, stellen Sie auch die Assembly bereit, auf die Sie verweisen.

Eine XML-Schemadefinition, wie in einer XSD-Datei definiert

Sie müssen ein Schema registrieren, bevor Sie es einer Variablen, einem Parameter oder einer Spalte zuordnen können, um typisierte XML-Variablen, Parameter und Spalten zu erstellen. Sie sollten typisiertes XML verwenden, wenn eine der folgenden Aussagen zutrifft:

  • Sie verfügen über Schemas für die XML-Daten, und der Server soll diese Daten gemäß den Schemas überprüfen.

  • Sie möchten Speicher und Abfragen auf Grundlage der Typinformationen optimieren.

  • Sie möchten Typinformationen beim Kompilieren der Abfragen besser nutzen.

Weitere Informationen finden Sie unter Teamentwicklung von Datenbanken, die XML-Schemaauflistungen verwenden.

Definieren von datenbankübergreifenden Verweisen

Wenn Sie Datenbankobjekte erstellen oder importieren, die auf Objekte in anderen Datenbanken verweisen, müssen Sie in den Eigenschaften des Datenbankprojekts einen entsprechenden Verweis definieren. Sie können für jede Datenbank, auf die Sie verweisen, SETVAR-Variablen definieren, die dem Server und der Datenbank entsprechen, auf die Sie verweisen möchten. Wenn Sie eine Objektdefinition so ändern, dass sie den Verweis einschließt, können Sie den Verweis mithilfe dieser Variablen anstelle der expliziten Namen von Server und Datenbank definieren. Wenn Sie das Datenbankprojekt erstellen, werden die Variablen durch die von Ihnen angegebenen Werte ersetzt.

Szenarien für datenbankübergreifende Verweise

Visual Studio Premium unterstützt die folgenden Szenarien:

  • Sie haben ein Datenbankprojekt erstellt und das Schema aus einer vorhandenen Datenbank importiert. Das Schema enthält Objekte, die auf Objekte in einer oder mehreren anderen Datenbanken verweisen. Definieren Sie in den Eigenschaften des Projekts einen entsprechenden Verweis, und ersetzen Sie die expliziten Namen von Server und Datenbank durch die SETVAR-Variablen. Wegen dieser Definition können die datenbankübergreifenden Verweise zur Entwurfszeit überprüft werden. Sie können das Datenbankprojekt auch in einer isolierten Entwicklungsumgebung bereitstellen, in der der Name des Zielservers möglicherweise vom Namen des Zielservers in Ihrer Produktionsumgebung abweicht.

  • Ihr Datenbankprojekt enthält datenbankübergreifende Verweise, die SETVAR-Variablen zur Identifikation von Servern und Datenbanken verwenden. Sie möchten die Namen dieser Variablen ändern und die Objektdefinitionen aktualisieren, die diese Verweise enthalten.

  • Sie möchten auf zusätzliche Datenbankschemas aus dem Datenbankprojekt verweisen, das Sie entwickeln. Sie möchten nur diese Schemas für das Team freigeben, ohne die anderen Datenbankprojekte freigeben zu müssen. Sie können für diese anderen Projekte einen Verweis auf die Datenbankschemadateien (.dbschema) hinzufügen und nur die Schemadateien in die Versionskontrolle einchecken. Durch diese Vorgehensweise können Sie den Zugriff auf die Datenbankprojekte mit den Schemas, auf die Sie verweisen möchten, einschränken. Verwenden Sie diese Vorgehensweise auch, wenn Sie ein Datenbankprojekt ohne abhängige Projekte bereitstellen möchten.

Mit der Datenbankumgestaltung können Sie zusätzliche Aufgaben mit datenbankübergreifenden Verweisen ausführen. Weitere Informationen finden Sie unter Gewusst wie: Umbenennen von Verweisen auf einen Server oder eine Datenbank.

Verweise auf Datenbankprojekte und Schemadateien

Wenn Sie einen Verweis in einem Datenbankprojekt hinzufügen, können Sie entweder ein weiteres Datenbankprojekt oder eine weitere Schemadatei angeben, das bzw. die beim Erstellen eines Datenbankobjekts erzeugt wird.

Sie sollten auf ein anderes Datenbankprojekt verweisen, wenn die folgende Aussage zutrifft:

  • Sie müssen Änderungen an den Schemas beider Datenbanken vornehmen, die den Verweis und die Datenbank enthalten, auf die Sie verweisen. Wenn Sie das Datenbankprojekt bereitstellen, das den Verweis enthält, stellen Sie auch das Datenbankprojekt bereit, auf das Sie verweisen.

Sie sollten auf eine Schemadatei verweisen, wenn eine der folgenden Aussagen zutrifft:

  • Sie müssen auf eine Datenbank verweisen, deren Projekt nicht in der aktuellen Projektmappe enthalten ist.

  • Sie müssen ein einzelnes Projekt bereitstellen, ohne die Projekte bereitzustellen, von denen es abhängig ist.

  • Sie verweisen auf ein Datenbankschema, das sich wahrscheinlich nicht ändert. In diesem Szenario können Sie die Schemadatei in die Versionskontrolle einchecken.

Einschränkungen datenbankübergreifender Verweise

Wenn Sie ein Datenbankschema importieren, werden durch die Verweise auf andere Datenbanken in den Objektdefinitionen Warnungen ausgegeben, weil das Datenbankprojekt diese Verweise erst überprüfen kann, nachdem es bereitgestellt wurde. Nachdem Sie die Datenbankverweise in den Eigenschaften des Projekts definiert haben, können Sie die Objektdefinitionen überprüfen und die in den Warnungen angegebenen Probleme beheben. Sie können dann die Objektdefinitionen aktualisieren, indem Sie die Namen von Servern und Datenbanken durch die Variablen ersetzen. Sie können diese Ersetzung auch mithilfe der Umgestaltung ausführen. Weitere Informationen finden Sie unter Gewusst wie: Hinzufügen von Verweisen zu Datenbankprojekten und unter Gewusst wie: Umbenennen von Verweisen auf einen Server oder eine Datenbank.

Die Variablen und Werte für die Server und Datenbanken, auf die Sie verweisen, sind für eine Buildkonfiguration nicht spezifisch. Sie müssen bei der Eingabe an einer Eingabeaufforderung mit MSBuild-Variablen auf den Server und die Datenbank verweisen. Diese Variablen können zur Bereitstellungszeit ersetzt werden.

Außerdem gelten die folgenden Einschränkungen:

  • Sie können einen Verweis auf eine Datenbank nur hinzufügen, wenn ein entsprechendes Datenbankprojekt vorhanden ist.

  • Sie müssen ein Datenbankprojekt erstellen, bevor Sie einen Verweis auf die Schemadatei für dieses Datenbankprojekt hinzufügen können.

  • Sie müssen die Datenbankprojekte erstellen, auf die Sie verweisen, damit die datenbankübergreifenden Verweise auf diese Projekte keine Warnungen verursachen.

  • Wenn Sie die Buildkonfiguration der Projektmappe oder des Datenbankprojekts ändern, auf die bzw. das Sie verweisen, müssen Sie die Projektmappe möglicherweise neu erstellen, damit die datenbankübergreifenden Verweise auf diese Projekte keine Warnungen verursachen.

  • Wenn Sie auf ein Objekt in einem Datenbankprojekt auf einem anderen Server verweisen, müssen Sie ihn auf Ihrem Zielserver als verknüpften Server definieren. Weitere Informationen finden Sie unter Gewusst wie: Hinzufügen von Verweisen zu Datenbankprojekten.

  • Für den Verweis auf einen Masterdatenbank ist kein datenbankübergreifender Verweis erforderlich.

  • Verweise, die SETVAR-Variablen enthalten, müssen immer das Format "[$ (VariableName)]" aufweisen. Wenn Sie die eckigen Klammern weglassen, können Sie das Datenbankprojekt möglicherweise nicht bereitstellen.

  • Die Namen der SETVAR-Variablen müssen eindeutig sein. Wenn Server und Datenbank denselben Namen aufweisen, müssen Sie Variablen mit unterschiedlichen Namen definieren, die aber in denselben Wert aufgelöst werden.

Sicherheitsüberlegungen

Die Schemadatei, die beim Erstellen eines Datenbankprojekts erstellt wird, enthält Schemainformationen für dieses Projekt. Sie sollten den Zugriff auf diesen Typ von Datei einschränken, um diese Schemainformationen zu schützen. Sie können Schemadateien für das Team freigeben, indem Sie sie in die Versionskontrolle einchecken, anstatt sie auf dem Zielserver bereitzustellen. Wenn sich das Datenbankprojekt für die Datenbank, auf die Sie verweisen, in derselben Projektmappe befindet, können andere Entwickler des Projekts beim Synchronisieren mit der Versionskontrolle darauf zugreifen und die Projektmappe erstellen.

Beispiel für einen datenbankübergreifenden Verweis

Bei zwei Datenbankprojekten, ReportDb und DependentDb, können Sie auf Objekte in DependentDb aus ReportDb verweisen. Fügen Sie zunächst einen Verweis auf die Eigenschaften des DependentDb-Datenbankprojekts hinzu, und definieren Sie die Variablen wie folgt:

  • RefServer

  • RefDatabase

Der Wert für RefServer ist der Name des Servers, auf dem sich DependentDb befindet. Der Wert für RefDatabase ist der Name der Zieldatenbank, die durch das DependentDb-Projekt bereitgestellt wird. In diesem Beispiel verfügt RefServer über den Wert StageSvr, und RefDatabase verfügt über den Wert DepDb.

Sie können ReportDb eine Ansicht hinzufügen, in der alle Spalten der Tabelle Employee in DependentDb angezeigt werden. Sie stellen die Tabelle in der Datenbank bereit, die auf dem Server StageSvr den Namen DepDb aufweist. Sie erstellen die Objektdefinition für diese Ansicht, indem Sie die folgenden Anweisungen hinzufügen:

CREATE VIEW [dbo].[DependentView]
AS
SELECT * FROM [$(RefServer)].[$(RefDatabase)].[dbo].[Employee]
;

Erstellen von zusammengesetzten Projekten mit Verweisen

Datenbank- und Serverprojekte können nicht allen Szenarios gerecht werden, die während der Datenbankentwicklung eintreten können. Um komplexeren Szenarios zu entsprechen, können Sie zusammengesetzte Projekte aus zwei oder mehr weiteren Projekten erstellen.

Sie erstellen ein zusammengesetztes Projekt, wenn Sie in einem Datenbankprojekt einen Verweis auf eine andere Datenbank oder ein anderes Serverprojekt hinzufügen, aber keine Werte für die Server- und Datenbankvariablen in den Projekten bereitstellen, auf die Sie verweisen. Wenn Sie diesen Typ von Verweis hinzufügen, schließt das Projekt, dem Sie den Verweis hinzugefügt haben, alle Objekte und Einstellungen in dem Projekt ein, auf das der Verweis zeigt.

Durch Erstellen eines zusammengesetzten Projekts ermöglichen Sie die folgenden Szenarios:

  • Sie können Datenbankschemas verwalten, die auf freigegebene Anmeldungen oder Schlüssel verweisen. Weitere Informationen finden Sie unter Teamentwicklung von Datenbanken, die auf freigegebene Serverobjekte verweisen.

  • Sie können eine große Datenbank in Unterprojekte aufteilen, um die Leistung zu verbessern oder um Schemas oder Objekttypen zu trennen. Sie können diese Änderung auch vornehmen, wenn mehrere Datenbanken einige Objekte gemeinsam nutzen, sich aber ansonsten unterscheiden. Sie können ein Projekt nur dann in zwei oder mehr Unterprojekte aufteilen, wenn durch diese Änderung kein Zirkelverweis erstellt wird.

Wenn Sie das zusammengesetzte Projekt bereitstellen, stellen Sie auch die Objekte in allen Datenbankprojekten bereit, auf die es verweist. Weitere Informationen finden Sie unter Teamentwicklung von großen Datenbanken.

Verweisen mit Literalen auf eine Datenbank

Sie können Datenbankverweisvariablen definieren, um den Namen einer Datenbank in der Bereitstellungszielumgebung anzugeben, auf die verwiesen wird. Wenn Sie keine SQLCMD-Variablen verwenden möchten, da der Zieldatenbankname in der Bereitstellungsumgebung stets unverändert bleibt, können Sie stattdessen ein Literal angeben, dessen Wert der Name der Datenbank ist, auf die verwiesen wird.

Bei der Verwendung von Variablen könnte die Syntax wie folgt aussehen:

CREATE VIEW [dbo].[View1] AS SELECT * FROM [($MasterDbVar)].[dbo].[spt_values].

Wenn Sie stattdessen ein Literal verwenden, könnte die Syntax wie folgt aussehen:

CREATE VIEW [dbo].[View1] AS SELECT * FROM [master].[dbo].[spt_values]

Weitere Informationen zum Angeben eines Literalwerts finden Sie unter Gewusst wie: Hinzufügen von Verweisen zu Datenbankprojekten.

Siehe auch

Aufgaben

Gewusst wie: Umbenennen von Verweisen auf einen Server oder eine Datenbank

Gewusst wie: Hinzufügen von Verweisen zu Datenbankprojekten

Konzepte

Erstellen und Ändern von Datenbank- und Serverobjekten